2015-10-17 76 views
0

的大小假設有一個結構fakes一個結構

struct fakes { 
.... 
}; 

而且還有一個指針:

struct fakes *fakes; 

我想知道是否sizeof(struct fakes)sizeof(*fakes)是相同的。

回答

3

我想知道sizeof(struct fakes)sizeof(*fakes)是否一樣。

是的,他們保證是一樣的。

+0

他們都是一樣的確實,但它是相當混亂使用相同標識符的'struct'標籤和實際的對象。 – chqrlie

+0

是的,使用相同的標識符可能會造成混淆。 – HuangJie

0

是的。這些都是一樣的。

sizeof用於確定數據類型在內存中佔用的空間量。編譯器實際上只關心類型,而不關心它的特定實例(因爲所有實例都應占用相同數量的空間)。所以sizeof(struct fakes)保證與sizeof(*fakes)相同。

+0

你能解釋爲什麼以下不起作用嗎? 'int a [10] = {1,2,34}; int * ptr = a; printf(「aray的大小是%d \ n」,sizeof(a)); 的printf( 「PTR的大小爲%d \ n」 個,的sizeof(* PTR));' 它給輸出作爲 '阿雷的大小爲40 大小的ptr的是4' – Karthick

+0

@Karthick否,即工作。當你在數組上使用'sizeof'時,它會給你數組佔用多少字節。因此,在10個「int」數組上的'sizeof',其中int是4個字節,產生'40'。單個元素'sizeof(* ptr)'或'sizeof(int)'的大小是'4'。 –

0

將sizeof運算符應用於類,結構體或聯合體類型時,結果爲該類型的對象中的字節數加上任何用於對齊單詞邊界上的成員的填充。結果不一定對應於通過添加個別成員的存儲要求計算的大小。

將sizeof運算符應用於引用時,結果與將sizeof應用於該對象本身的結果相同。

檢查了這一點,

https://msdn.microsoft.com/en-us/library/4s7x1k91.aspx

+0

既然這是C,那麼「class」並不適用。另外,儘管微軟對'sizeof'的實現可能符合標準,但鏈接頁面只能保證適用於Visual C++,而不適用於其他實現。 –