C

时间:2015-12-08 20:24:07

标签: c arrays malloc elements

我在查找动态分配数组中的数组元素数时遇到问题。 如果我有一个普通的数组,我知道如何找出有多少元素:

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 个答案:

答案 0 :(得分:1)

您看到不同尺寸的原因是因为底层数据不相同。

在第一个示例中,您已经静态编译了整数的数组。这些数组元素在内存中都是对齐array 数组。使用sizeof(array)可以获得此数组的整体大小。

在第二个示例中,您在整数数组上有一个动态分配的指针。这在记忆中是完全不同的。实际上,array变量不是数组。它是指向第一个元素的指针。在这里使用sizeof(array)返回第一个元素上指针的大小,因此为8。