2012-05-20 45 views

回答

1

在大多數平臺上,指針通常都是基於正在編譯的系統的內存體系結構的固定大小。就其而言,他們的類型是無關緊要的。一個int點的大小與點到複雜struct相同。這是void這一事實不會改變這一點。

+1

這未必是真實的。 –

+0

@OliCharlesworth - 指針大小何時/如何不同? – zellio

+0

C標準不作任何聲明,所有指針都具有相同的大小,以及一些古老的建築,他們是絕對不一樣的尺寸(雖然我沒有任何例子手)。 –

1

所有的指針在編譯時都是編譯器已知的大小;正在指出的項目大小可能不同。通過所需大小malloc/calloc自己,所以編譯器與分配沒有問題。

編輯(回覆留言)有些情況下,不同指針的大小是不同的。例如,在編譯爲哈佛結構的代碼的數據指針必須包括區分存儲在從存儲在數據存儲器中的數據的程序存儲器中的數據,而函數指針不需要額外的存儲一個額外的存儲。但是,這是編譯器已知的,所以它通過查看指針的類型知道所需的分配大小。

+5

C不是C++,模板的討論不屬於這裏。 –

+1

@VariableLengthCoder糟糕,你是對的!我被提及的「通用」指針拋棄了。 – dasblinkenlight

+0

我同意,OP的未定義術語「通用指針」的使用使得這個問題很難回答。 –

0

無論指向哪個指針,指針都是相同的大小,只是它們指向的內容可以是不同的大小。

+0

這不一定是真的。 –

3

我不確定你的意思是「通用指針」,但如果你的意思是「指向無效」,它只是一種能夠代表任何其他指針值的類型。這並不意味着它必須是任意大的;實際上它被定義爲與「指向字符的指針」相同的大小和表示,它也可以指向任何類型。