我正在编写一个返回int数组大小的函数。逻辑是:sizeof(arr) / sizeof(int);
如果我将它保存到变量,它工作正常,但如果我将它返回到函数,我得到1
的10字节大小的数组。为什么?这是我的代码:
int b[10];
int t1= sizeof (b) / sizeof (int);
size_t t2 = lenof(b);
printf("t1 = %d, t2 = %d\n", t1, t2);
size_t lenof (int arr[]) { return sizeof (arr) / sizeof (int); }
以上C代码打印:
t1 = 10, t2 = 1
有人可以帮我解释一下吗?也许我应该使用指针吗?感谢。
答案 0 :(得分:2)
情景1:
int t1= sizeof (b) / sizeof (int);
在这种情况下,sizeof(b)
返回数组的大小,除以int
的大小,正确地生成数组元素的数量。
情景2:
将数组传递给函数时,它会衰减为指向array.Hence中的第一个元素的指针,
lenof(int arr[])
实际上完全等同于:
lenof(int *arr)
证明,sizeof (arr)
会产生系统上指针的大小&它的大小似乎与系统上int
的大小相同,因此除法和函数返回1
。
C不提供对数组的边界检查,因此如果写入超出数组边界,则永远不会收到警告。这实际上意味着使用数组,你必须自己跟踪数组中存在多少元素。
如果您需要函数内部数组的大小,最简单的解决方案是将数组的大小作为单独的参数传递。
lenof(int arr[], int len);