我正在学习C语言。
我需要 int数组的大小(在函数的参数中传递)。
我可以使用:
获取int数组的大小int size = sizeof(arr) / sizeof(int);
但是,当我在参数化数组中使用相同的代码时,上面的代码对我来说不起作用。
程序:
void printArraySize(){
int arr[]= {1, 2, 3, 4, 6, 7};
int size = sizeof(arr) / sizeof(int);
printf("\nSize = %d",size); // resulting right value
doStuff(arr);
}
void doStuff(int arr[]){
int size = sizeof(arr) / sizeof(int); // resulting 1
printf("\ndoStuff::Size = %d",size);
}
输出:
尺寸= 6
doStuff :: Size = 1
“尺寸”值显示正确。但是,为什么 doStuff :: Size 是1?
虽然,我在两个函数中都使用相同的概念,但差别只是参数化数组。
如果我做了,请提出你的建议或纠正错误。
答案 0 :(得分:1)
当一个数组传递给一个函数时,它会被转换成指向它的第一个元素的指针。所以你在函数中做的事情基本上等同于:
int size = sizeof(int*) / sizeof(int); // resulting 1
如果要传递大小,请将其作为另一个参数传递给函数。
例如,
void doStuff(int arr[], size_t size){
..
}
并将该函数调用为:
doStuff(arr, size);
您应该真正使用size_t
作为sizeof
运算符返回size_t
,其可能大于int
。