我有一个简单的宏:
#define LENGTH(arr) (sizeof(arr)/sizeof(arr[0]))
无论出于何种原因,在设置类似的内容时似乎工作正常:
int length = LENGTH(arr)
但不要在循环中进行比较
while(i < LENGTH(arr))
答案 0 :(得分:4)
对于相同的arr
,宏将起作用或不起作用。
可能的问题是循环中的arr
是指针而不是数组。该宏不适用于指针,它只适用于数组。
答案 1 :(得分:4)
请记住,数组在传递时会衰减到指针。因此,如果将数组传递给函数,它不再是数组,而是函数内部的指针。一个指针,它只包含有关类型的信息,但不包含数组的大小。
答案 2 :(得分:-2)
sizeof(arr)
与您在执行arr.Count()
或arr.Length
时为更高级别的语言提供的内容不同。
这为您提供了arr
变量的存储空间。此不表示数组的长度。
如果您有char *arr = malloc(sizeof(*arr) * 100);
,而sizeof(arr)
,则通常(取决于您的系统)获得4.如果您执行sizeof(*arr)
或sizeof(arr[0])
,则相同事情,你有sizeof(char)
是1,所以宏给你4/1 = 4:错误。它与char arr[100]
一起使用,因为sizeof(arr)
给出100,因为数组不会衰减为sizeof
的指针类型。