我在查找动态分配数组中的数组元素数时遇到问题。 如果我有一个普通的数组,我知道如何找出有多少元素:
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
请有人帮忙吗?
答案 0 :(得分:1)
您看到不同尺寸的原因是因为底层数据不相同。
在第一个示例中,您已经静态编译了整数的数组。这些数组元素在内存中都是对齐,array
是数组。使用sizeof(array)
可以获得此数组的整体大小。
在第二个示例中,您在整数数组上有一个动态分配的指针。这在记忆中是完全不同的。实际上,array
变量不是数组。它是指向第一个元素的指针。在这里使用sizeof(array)
返回第一个元素上指针的大小,因此为8。