2014-02-26 40 views
1

根據C標準,這被認爲是定義這是C中的一個定義嗎?

int x; 

因爲它聲明x和分配存儲空間。但這也是一個定義嗎?

int *x; 

也就是說,聲明一個指針變量或數組變量是否分配存儲空間?我猜不是因爲我們必須使用malloc。

+1

用T替換類型('int *'),所以..'T x':這是否被認爲是一個定義? – user2864740

+4

在這兩種情況下,都會分配一個對象。在第二種情況下,該對象恰好是一個指針。 –

+4

與之前的數千人一樣,你需要學習區分指向他們指向的東西的指針。指針的存儲也是存儲。指針本身就是數據,不管它是否被用來訪問更多的數據。 – delnan

回答

5

int* x;是一個定義。它分配存儲來存儲指針。它不會爲整數分配任何存儲空間 - 這就是爲什麼如果您不想指向現有變量(或其他內存位置)需要malloc

純聲明將類似extern int x;extern int* x;,然後在不同的編譯單元中具有相應的定義。

4

int *x;分配存儲。變量x被分配的存儲等於sizeof(int *)。它包含一個垃圾值,如果它位於塊範圍,或者包含一個空值指針,如果它位於文件範圍。

+3

它最初包含垃圾,如果它在塊範圍。如果它在文件範圍內,它最初包含一個空指針值。 –

+0

@KeithThompson謝謝! –

相關問題