完整示例:
#include <stdio.h>
void test(int arr[]) {
int arrSize = (int)(sizeof(arr) / sizeof(arr[0]));
printf("%d\n", arrSize); // 2 (wrong?!)
}
int main (int argc, const char * argv[]) {
int point[3] = {50, 30, 12};
int arrSize = (int)(sizeof(point) / sizeof(point[0]));
printf("%d\n", arrSize); // 3 (correct :-) )
test(point);
return 0;
}
在将它传递给函数之前, sizeof 给了我正确的值。对函数中完全相同的数组执行完全相同的操作会产生奇怪的结果。少了一个元素。为什么?
原文由 dontWatchMyProfile 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您将数组传递给 C 中的函数时,数组衰减为指向其第一个元素的指针。当您在参数上使用
sizeof
时,您获取的是指针的大小,而不是数组本身。如果您需要该函数知道数组的大小,则应将其作为单独的参数传递:
另请注意,出于类似的原因(采用
sizeof
指针),sizeof(point)/sizeof(point[0])
技巧不适用于动态分配的数组,仅适用于堆栈上分配的数组。