我正在學習c,通過閱讀K & R並進行練習。我現在在第5章討論指針。我不明白爲什麼聲明:應該int * p長int * p而不是?
int *p;
是不是:
long int *p;
因爲* P包含了地址,並且沒有保證一個int類型的變量將是大到足以容納一個大地址。或者在那裏?
我正在學習c,通過閱讀K & R並進行練習。我現在在第5章討論指針。我不明白爲什麼聲明:應該int * p長int * p而不是?
int *p;
是不是:
long int *p;
因爲* P包含了地址,並且沒有保證一個int類型的變量將是大到足以容納一個大地址。或者在那裏?
int是指針指向的對象的類型,而不是指針本身的大小。指針的大小是它指向的對象的獨立的到
例如:
int *p;
double *d;
兩個pointers
p和d將「通常」具有相同的尺寸,但它們指向的數據別t具有相同的尺寸。
編輯:正如在評論指針中指出的那樣,實際上並不是「需要」具有相同的大小。
正如約翰解釋說:
例如,一個char * 一個字尋址系統實際上可能比int *較大, 因爲它需要指定偏移 成字。唯一的保證是 這一空白*與char *具有相同的 對齊和代表性,即 指向兼容的類型有 相同的排列和代表性, 的指針,以結構類型有 相同的排列和代表性,並 指針到聯合類型都具有相同 對準和表示
int *
不是int
類型。它是一個指針類型。因此它將足夠大以存儲任何地址。 long int *
的尺寸與int *
的尺寸相同 - 只是您要處理的事物指向不同。
long int *
指指向一個long int
。
這並不意味着長指針。
指針是獨立的東西,將有自己的大小。 (取決於你正在編譯的位數)
這是一個指向int的指針(我傾向於寫成'int * p')。這基本上意味着p是一個指向int的指針。
第二個是指向long int的指針。
它們都是指針,因此存儲的字節數相同,但一個引用int,另一個是long int。
不要將指針的類型與它指向的類型混淆。表達式的類型*p
是int
,但p
的類型是int *
。
指向'double'和'int'的指針不必具有相同的大小。 – 2011-05-18 21:52:40
@Carl嗯,我認爲他們應該。指針的大小是否與給定系統一致? – Pepe 2011-05-18 21:55:17
Thx Peter。我猜編譯器知道基於編譯器選項有多大* p。 – grok12 2011-05-18 21:55:58