0

可能重复:
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。

4

2 回答 2

1

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

C 数组不跟踪它们包含多少项。只有在编译时知道数组的大小时,才能使用此语法。但是你不能用这种方式分配的数组来做到这一点。

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

于 2012-12-11T03:40:26.117 回答
0

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

于 2012-12-11T03:41:30.667 回答