错误代码:
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[]的)