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

可能重复:
c动态内存分配和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。

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

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

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

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