3

我有一个简单的宏:

#define LENGTH(arr) (sizeof(arr)/sizeof(arr[0]))

无论出于何种原因,在设置以下内容时它似乎都可以正常工作:

int length = LENGTH(arr)

但不要循环比较

while(i < LENGTH(arr))
4

3 回答 3

4

同样arr,宏将起作用或不起作用。

可能的问题是arr循环中的 in 是一个指针而不是一个数组。该宏不适用于指针,它仅适用于数组。

于 2013-10-18T14:54:32.667 回答
4

请记住,数组在传递时会衰减为指针。因此,如果将数组传递给函数,则它不再是数组,而是函数内部的指针。一个指针,它只包含关于类型的信息,但不包含数组的大小。

于 2013-10-18T14:56:27.820 回答
-2

sizeof(arr)与更高级的语言在您执行arr.Count()arr.Length.

这为您提供了arr变量的存储空间。这并不意味着数组的长度。

如果你有char *arr = malloc(sizeof(*arr) * 100);,你sizeof(arr)通常会(取决于你的系统)得到 4。如果你有sizeof(*arr)or sizeof(arr[0]),这是同一件事,你有sizeof(char)which 是 1,所以宏给你 4/1 = 4 : 错误。它适用于char arr[100]因为sizeof(arr)给你 100 因为数组不会衰减为指针类型sizeof

于 2013-10-18T14:57:22.557 回答