2013-02-10 58 views
0

我有以下代碼:查找尺寸指針指向

int* d = (int*) malloc(100 * sizeof(int)); 
cout<<"size of d which is pointer is: " << sizeof(d)<<endl; 

我知道的sizeof輸出4作爲d是一個PTR。但是,我怎樣才能找到整個數組的大小sizeof

+3

簡單 - 你不能。 – 2013-02-10 09:00:53

+0

也許重複http://stackoverflow.com/a/492410/1758762 – duDE 2013-02-10 09:03:29

+0

另一個相關的和有趣的問題是這一個:http://stackoverflow.com/questions/2034450/size-of-dynamically-allocated-array – 2013-02-10 09:04:59

回答

7

你不能 - sizeof是編譯時操作,因此不動態。

由於您使用的是C++,因此請使用std::vector。否則,創建一個結構來存儲指針和數組的大小。代之以傳遞。

1

指針爲您提供了存儲數據的地方,這就是爲什麼您無法從該信息獲取數據的原因。

它類似於知道我的房子有多大是知道我的地址(沒有先驗知識或類似谷歌地圖使用工具)

1

直接答。沒有你不能,但你可以試試這個:

int x[]={1,2,3,4}; 
int *ptr=x; 
decltype(sizeof(*ptr)) size=0; 
while(*ptr<5){ 
      size =size+sizeof(*ptr); 
      ptr++; 
      } 
      cout<<"Size is : "<<size; 

輸出:

Size is:16

1

你可以說你已經使用sizeof瞭解整個數組的大小 - 你有它在你原來的malloc呼叫 - 100 * sizeof(int)。雖然malloc機器必須知道內部與指針相關聯的內存量(它需要用於相應的free調用),並且顯然某些實現提供了返回此信息的函數,據我所知,沒有獨立於實現的可移植性沒有自己處理它的方式。