舉兩個栗子,理解C語言指標

2021-08-30 17:41:27 字數 1468 閱讀 2135

為什麼要有指標?

我們隔壁的隔壁宿舍最近經營起了零食店:

「我:來5包衛龍大麵筋,送到413!」

「老闆:麼麻噠!來咧!」

假設這棟宿舍樓沒有門牌號:

「我:來5包衛龍大麵筋,送到……額……4樓一上樓從最左邊往右第13個宿舍!」

「老闆:…… 」

其實指標就像門牌號一樣~便於定位查詢記憶體中的資料。

4gb的記憶體條有2^32個房間存資料,沒有門牌號怎麼找?從第乙個開始數?哈哈。

在c語言中可以這樣理解乙個變數:

int

main()

int a = 10;就是a這個人從房地產商(系統)那裡買來一間房子,裡面放著自己的東西10,此時a這個人的位址是系統知道的,然後a把這個位址(&)告訴了他的好朋友b,並且給了b這間房子的鑰匙(*),這樣b就可以通過位址找到這個房子位址並且在房間裡取或者放自己的東西了。如果a不想讓b亂動家裡東西,可以和b說「不許亂動哦!」(const)。

指標變數

這個其實挺好理解,在我們中文中,一般把強調的重點放在後面,指標變數是個變數

像這樣理解的還有:陣列指標、指標陣列

指標變數是個變數,這個變數裡面存的是位址資料。

指標變數的大小:

不論是什麼型別(包括void *):

32位環境下,指標變數的大小是4位元組。

64位環境下,指標變數的大小是8位元組。

emmm怎麼理解呢?

計算機給能訪問的記憶體位址是規範的長度,全0到全1,32位系統下可編址的範圍32個位元位(4位元組),64位機器可編址的範圍為64個位元位(8位元組)。

#include

intmain

(int argc,

const

char

* argv)

光說不頂用,來驗證下,在64位環境下:

void*8

char*8

int*

8float*8

double

*8

32位機下:

void*4

char*4

int*

4float*4

double

*4

void*

可以做以下這樣的事:

void *vp;

但是void*型別的指標不能被解引用,因為解引用後它不知道要訪問多大的空間(int *解引用可以訪問4位元組的空間,char*解引用後可以訪問1位元組的空間)。

void*可以接收任意型別的指標,這樣就可以用它來做一些介面方面的事,這就方便了許多。

舉兩個栗子 如何正確建立個人的機器學習專案集

面試機器學習方面的工作時,在簡歷的個人專案那塊,你會寫什麼?建模?做機器學習專案?專案資料從哪兒來?在 sharpestminds 創始人 edouard harris 介紹的兩個成功例子中,人家是從基礎的收集資料開始一步步做專案的 目標明確,做到極致。我是一名物理學家,在 yc startup 工...

C指標兩個疑惑

1.cpp view plain copy include include intmain ptr printf d ptr return 0 剛剛看這樣的題目,感覺蠻簡單的。ptr定義指向了 m array的首位址,char型別1位元組。乙個int4個位元組 ptr 後,指標ptr的值加上1乘si...

兩個指標相減

原文 如果兩個指標指向同乙個陣列,它們就可以相減,其結果為兩個指標之間的元素數目。假設我住在廣場路124號,mag住在廣場路142號,每家之間的位址間距是2 在我這一側用連續的偶數作為街道位址 那麼mag家就在我家往前 142 124 2家,也就是說可以得到我們兩家之間相隔8家。也就是說可以利用兩個...