错误代码:
void WrongArrayUse(int my_array[])
{
cout<<sizeof(my_array)<<endl;
}
int main()
{
int array[]={3,5,2,4,1,0};
WrongArrayUse(array);
}
(实际上这段代码本意是想用sizeof(my_array)/sizeof(my_array[0])来求数组长度。)
报错:
‘sizeof’ on array function parameter ‘array’ will return size of
‘int*’
原理分析:
C/C++中如果一个函数接受一个数组作为参数,那么数组将会被退化为指针。
解决办法:
如果实在想用sizeof(array)/sizeof(array[0])算长度,请不要将数组作为参数,而是在main函数中算好length,再将传入函数中。
#include <iostream>
using namespace std;
void CorrectArrayUse(int my_array[],int my_length)
{
cout<<my_length<<endl;
}
int main()
{
int array[]={3,5,2,4,1,0};
int length=sizeof(array)/sizeof(array[0]);
CorrectArrayUse(array,length);
}
思考
maybe是因为传入的数组实际上都变成指针了,所以在对各个数组执行排序算法的时候才不用传引用/指针

(本来以为要int& A[]的)
在C/C++编程中,当数组作为函数参数传递时,它会退化为指针。因此,尝试在函数内部通过`sizeof`获取数组长度会导致错误,因为这将返回指针的大小而非实际数组长度。正确做法是预先在调用函数的地方计算数组长度,然后将长度作为额外参数传递。示例代码展示了如何修正这个问题,避免在函数内部使用`sizeof`计算长度。
531

被折叠的 条评论
为什么被折叠?



