利用数组传参时sizeof出现的问题

今天周末有点无聊,我想着随便写几个代码玩玩。

可突然发现一个问题,本人之前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.

 

 

posted @ 2012-11-03 17:42  专属9号  阅读(295)  评论(0编辑  收藏  举报