我试图找出C中数组的大小。
我的第一个实施是基于this question的接受答案:
int size = sizeof(arr)/sizeof(arr[0]);
但那总是给我一个。我试过这样做:
int size = sizeof(arr);
无论数组的大小如何,每次都给我4次。
这是我使用的代码的最小示例。
void findSize(int arr[]) {
int size = sizeof(arr);
printf("%d\n",size);
}
int main(int argc, char** argv) {
int arr[] = {4,6,9,2,6,3,7,2,5,1,2};
findSize(arr);
}
无论我使用哪种数组,此代码始终打印4。
为什么打印4,如何找到阵列的实际大小?
答案 0 :(得分:2)
您:
void findSize(int arr[]) {
相当于:
void findSize(int arr[3424]) {
与:
相同void findSize(int *arr) {
因此sizeof(arr)
内的findSize
会评估指针的大小。
在C99中你可以这样做(read more about it here):
void findSize(int n, int arr[n]) {
但即使在这种情况下,sizeof(arr)
也会返回指针的大小。
为什么?由于数组变量会自动衰减到指向第一个元素的指针。
更新:C99中的参数错误,sizeof
仅适用于函数体中声明的变长数组。感谢@rslemos。并且下标可以正确地推进嵌套数组的指针see example。
答案 1 :(得分:1)
当你将一个数组传递给一个函数时,它会衰减到一个指向数组中第一个元素的指针,而sizeof
运算符只能得到指针的大小,而不是它指向的数组。
如果要将数组的大小传递给函数,则必须将其作为参数传递。
答案 2 :(得分:0)
该函数只传递一个指向第一个元素的指针,而不是整个数组。