2011-05-18 128 views
5

我正在學習c,通過閱讀K & R並進行練習。我現在在第5章討論指針。我不明白爲什麼聲明:應該int * p長int * p而不是?

int *p; 

是不是:

long int *p; 

因爲* P包含了地址,並且沒有保證一個int類型的變量將是大到足以容納一個大地址。或者在那裏?

回答

8

int是指針指向的對象的類型,而不是指針本身的大小。指針的大小是它指向的對象的獨立的到

例如:

int *p; 

double *d; 

兩個pointers p和d將「通常」具有相同的尺寸,但它們指向的數據別t具有相同的尺寸。

編輯:正如在評論指針中指出的那樣,實際上並不是「需要」具有相同的大小。

正如約翰解釋說:

例如,一個char * 一個字尋址系統實際上可能比int *較大, 因爲它需要指定偏移 成字。唯一的保證是 這一空白*與char *具有相同的 對齊和代表性,即 指向兼容的類型有 相同的排列和代表性, 的指針,以結構類型有 相同的排列和代表性,並 指針到聯合類型都具有相同 對準和表示

+2

指向'double'和'int'的指針不必具有相同的大小。 – 2011-05-18 21:52:40

+1

@Carl嗯,我認爲他們應該。指針的大小是否與給定系統一致? – Pepe 2011-05-18 21:55:17

+0

Thx Peter。我猜編譯器知道基於編譯器選項有多大* p。 – grok12 2011-05-18 21:55:58

1

int *不是int類型。它是一個指針類型。因此它將足夠大以存儲任何地址。 long int *的尺寸與int *的尺寸相同 - 只是您要處理的事物指向不同。

3

long int *指指向一個long int
這並不意味着長指針。

指針是獨立的東西,將有自己的大小。 (取決於你正在編譯的位數)

1

這是一個指向int的指針(我傾向於寫成'int * p')。這基本上意味着p是一個指向int的指針。

第二個是指向long int的指針。

它們都是指針,因此存儲的字節數相同,但一個引用int,另一個是long int。

0

不要將指針的類型與它指向的類型混淆。表達式的類型*pint,但p的類型是int *

相關問題