无法在C中查找数组的长度?

时间:2012-12-11 03:38:10

标签: c arrays

  

可能重复:
  c dynamic memory allocation and sizeof()

我试图通过保留一个16 MiB的巨大块并通过尝试每次访问不同的元素来找到时间来找到缓存块。我只是不能写出数组的长度。 如何编写for循环来迭代数组。我需要数组的长度;我该怎么找到?我尝试了sizeof(a)/sizeof(a[0]),但这不起作用,或者我做错了,因为我的作业单告诉我它可以容纳400万int ...

register *a;
a = malloc(16777216);
int i;
for (i = 0; i < sizeof(a)/sizeof(a[0]); i = i + 1) {

    printf("\ni = %d", i);
}

这只打印i = 0 i = 1。

2 个答案:

答案 0 :(得分:1)

代码sizeof(a)只返回指针register *a的大小,与a指向的数组大小完全无关。

C数组不会跟踪它们包含的项目数。只有在编译时已知数组的大小时,才能使用此语法。但是你不能用这种方式分配数组。

对于此任务,您需要自己跟踪此信息。您可以将该值存储在变量中,或者可以附加一个数组元素,该数组元素具有一个特殊值,表示它是数组的结尾(就像我们使用C字符串一样)。

答案 1 :(得分:0)

a是寄存器指针而不是数组。所以sizeof(a)不会像你期望的那样返回16MB。请直接使用16777216而不是sizeof()