今天周末有点无聊,我想着随便写几个代码玩玩。
可突然发现一个问题,本人之前C++的代码写的很少,遇到这个问题,各位看客如果谁知道原因,请不吝赐教。
#include<iostream> using namespace std; template<class T> bool checkArray(T a[]){ int i; cout<<sizeof(a)/sizeof(a[0])<<endl; //测试 这里输出结果 为 1 for(i=0;i<sizeof(a)/sizeof(a[0]);i++){ if(a[i] > a[i+1]){ cout<<"false"<<endl; return false; } } cout<<"true"<<endl; return true; } int main(void){ int x[] = {1,3,3,5,3,233}; checkArray(x); cout<<sizeof(x)/sizeof(x[0])<<endl; //这里输出结果为6 return 0; }
问题是 在main函数里面的cout<<sizeof(x)/sizeof(x[0])<<endl;输出结果为6
可是在传参到函数checkArray中去 cout<<sizeof(a)/sizeof(a[0])<<endl;输出结果为1
这是为什么呢?
终于还是理解了,原来是数组传参进来的时候已经退化为指针了。
这个问题搞定了。
Happy Saturday.