我试图通过保留一个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。
答案 0 :(得分:1)
代码sizeof(a)
只返回指针register *a
的大小,与a
指向的数组大小完全无关。
C数组不会跟踪它们包含的项目数。只有在编译时已知数组的大小时,才能使用此语法。但是你不能用这种方式分配数组。
对于此任务,您需要自己跟踪此信息。您可以将该值存储在变量中,或者可以附加一个数组元素,该数组元素具有一个特殊值,表示它是数组的结尾(就像我们使用C字符串一样)。
答案 1 :(得分:0)
a是寄存器指针而不是数组。所以sizeof(a)不会像你期望的那样返回16MB。请直接使用16777216而不是sizeof()