2015-12-08 100 views
0

我在查找動態分配數組中數組元素的數量時遇到了問題。 如果我有一個正常的數組我知道如何找出多少元素在那裏:C中動態分配數組的數組元素數

int array[] = {1,2,3}; 

printf("Number of array elements: %i\n",(int)(sizeof(array)/sizeof((array)[0]))); 

此打印我:

Number of array elements: 3 

但是,當我要動態分配一個數組,並知道其大小我無法以相同的方式得到它:

int * array;

array = malloc(3*sizeof(int)); 
printf("Number of array elements: %i\n",(int)(sizeof(array)/sizeof((array)[0]))); 

這總是給我:

Number of array elements: 2 

無論多麼多麼大或小我做的分配總是打印

2 

請有人可以幫忙嗎?

回答

1

您看到不同大小的原因是因爲底層數據不一樣。

在你的第一個例子中,你有靜態編譯數組整數。這個數組元素全都是對齊在內存中和array數組。使用sizeof(array)可以讓你獲得這個數組的整體大小。

在第二個示例中,您在整數數組上有一個動態分配的指針。內存完全不同。變量array實際上不是數組。這是指向第一個元素的指針。在這裏使用sizeof(array)返回第一個元素上指針的大小,因此返回8.