2015-12-08 143 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.