2015-10-17 230 views
-3

我定義我的結構就像當:不正確的輸出使用的sizeof()

struct Shape { 
unsigned int l; // value for length 
unsigned int h; // value or height 
unsigned int b; // value for breadth 
}; 

在我的計劃,我動態分配形狀的一個實例:

Shape *image = new Shape[i]; 

,我試圖打印出來它的大小:

cout<< "The size of image is " << sizeof(image)<< ends; 

不管我的價值是什麼,我得到了相同的輸出:(例如:0,1,2,10)

The size of the image is 8 

這是爲什麼?

注:但是當我申請sizeof操作符的外形結構,然後我得到正確的答案:

sizeof(Shape) -> returns 12 
+2

提示:指針... – LogicStuff

回答

3
The size of the image is 8 

這是爲什麼?

輸出是正確的,sizeof(image)給你的指針變量Shape*的大小本身,而不是分配的數組的大小。

+0

我想獲得數組的大小,我怎麼能得到它? – Mathew

+0

@Mathew你根本不能用指針,你需要自己跟蹤它。該信息不存在。改爲使用'std :: vector ',而不要嘗試自己管理'new''delete'。 –

+0

謝謝你,這就是我想知道 – Mathew

4

imageShape*型的,而不是Shape型的,所以sizeof(image)給出Shape*大小。

改爲嘗試sizeof(*image)

+0

sizeof(*圖片)現在給我12無論我的價值。我的聲明是Shape * image = new Shape [10]; – Mathew

+0

@Mathew'sizeof(* image)'與'sizeof(Shape)'相同,因此你將得到12,因爲'Shape'有3個int成員,每個成員在你的系統上有4個字節。你想獲得數組的大小? –

+0

@bku_drytt是的我正在嘗試獲取數組的大小,以便在需要時動態增加大小 – Mathew