2010-11-16 94 views
2

可能重複:
Are there are any platforms where pointers to different types have different sizes?
are all data pointers of the same size in one platform?是相同大小的指針?

sizeof(Bucket *)相同sizeof(int *),對不對?

順便說一句,是char arr[];在c90中有效嗎?

+1

[有沒有任何平臺,指向不同類型的指針具有不同的大小?](http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to-不同類型具有不同大小),[指針的大小可以根據指向的內容而變化](http://stackoverflow.com/questions/1473935/can-the-size-of-pointers-vary-取決於whats-pointed-to) – outis 2010-11-16 09:24:44

+1

你應該把它分成兩個問題,這樣他們可以很好地回答分開 – 2010-11-16 09:31:11

+0

重複的[是在同一個平臺上的大小相同的數據指針?](http:// stackoverflow。 com/questions/1241205/are-all-data-pointers-of-the-size-in-one-platform) – 2010-11-16 13:20:01

回答

2

原帖:

是的,這是正確的。指針的大小是 。

但是,那是錯誤的。我射得太快了!我很抱歉。一些不同指針大小的「情況」確實存在,取決於平臺,也取決於類型:查看http://c-faq.com/ptrs/generic.htmlhttp://c-faq.com/null/machexamp.html的示例或至少一般的解釋。 (非常感謝@fmark和@paxdiablo,我也學到了一些東西)。但是,我從來沒有遇到指針大小不一的情況(幸運的是/不幸?)。

+0

順便說一句,是char arr [];在C90有效? – arr 2010-11-16 09:19:31

+0

這是正確的,但指針的大小取決於平臺 – 2010-11-16 09:19:43

+2

真的嗎?你想引用你的來源,聲稱(「指針是相同的大小」)?如:ISO標準中的哪一項要求這樣做? – paxdiablo 2010-11-16 09:23:49

4

我相信沒有要求指針都是相同的大小。唯一的要求是所有對象指針都可以存儲在void *中,當轉換爲void *時,它們將相同,並且所有函數指針(如果轉換爲其他類型的函數指針並返回)將是相同的。如果你關心C++的成員函數指針,那麼你會發現指針的大小不一樣,如果你不關心C++的成員函數指針,或者你在一個更晦澀的架構上工作。

在C90中,char arr[];是一種預先聲明全局待定長度數組的有效方法。請注意,char arr[]是不完整的類型,因此您必須先聲明它,然後才能使用sizeof。在C99中製作靈活的陣列成員的方式是無效的。

+0

-1再次,不正確。請參閱http://c-faq.com/ptrs/generic.html – fmark 2010-11-16 09:31:27

+1

我認爲-1不明確的措詞有點苛刻。我真的忘了所有關於函數指針的問題,直到我的答案的第二段,所以我沒有想過早些時候做出區分,特別是因爲OP對函數指針沒有特別的興趣。 – 2010-11-16 09:35:20

+0

'char arr [];'在c89中有效嗎? – arr 2010-11-16 10:51:02