今天被问到一个问题,
#include <iostream>
using namespace std;
int numofarr( double a[] )
{
cout << sizeof a<<endl;
cout << sizeof *a<<endl;
return sizeof a / sizeof *a;
}
int main()
{
double a[6]={1,2,3,4,5};
cout << sizeof a<< endl;
cout << numofarr( a ) << endl;
return 0;
}
一旦把数组传到函数里面了,sizeof运算符就失效了,
这个在main函数中a的真实语义是 double[] &(这里使用这种写法在C++中并不支持,
又参考了http://www.cnblogs.com/
最终得到一个解决方案:
#include<iostream>
#include<vector>
using namespace std;
//a class definition to for testing
class A
{
public:
int x;
double y;
vector<int> z;
};
using namespace std;
//using c++ template technique to compute length
template<class T,int N>
char(&len_byte(T(&) [N]))[N];
#define arr_len_1(_array) (sizeof(len_byte(_array)))
//using normal C macro to compute length
#define arr_len_2(_array) (sizeof(_array)/sizeof(_array[
template<int N>//把这个写成模板即可-----------------
void comp_length(int(&arr) [N])
{
cout<<"arr_len_1(arr)="<<arr_
cout<<"arr_len_2(arr)="<<arr_
}
int main()
{
A a[20];
int b[5];
cout<<"arr_len_1(a)="<<arr_
cout<<"arr_len_2(a)="<<arr_
cout<<"arr_len_1(b)="<<arr_
cout<<"arr_len_2(b)="<<arr_
//compute array length in function comp_length
comp_length(b);
return 0;
}