sizeof以及乱七八糟的指针
下面的输出是?
double* (*a)[3][6];
cout<<sizeof(a)<<endl;
cout<<sizeof(*a)<<endl;
cout<<sizeof(**a)<<endl;
cout<<sizeof(***a)<<endl;
cout<<sizeof(****a)<<endl;
看见类似“double* (*a)[3][6]; ”的语句,把“(*a)”这一部分看作一个整体,不妨计为A,则a就是指向A的指针,则原语句“double* (*a)[3][6]; ”可以看作“double* A[3][6]; ”,于是A就表示一个二维数组,数组的元素为double*类型。那么a就是指向A的指针。分析得出有如下结果:(注意,sizeof作用于一个数组的时候,结果是该数组所占字节数的大小,不是数组元素的个数,也不能把数组名作为指针来看,否则指针的大小为4,输出就为4了)
double* (*a)[3][6];
cout<<sizeof(a)<<endl; ----- 4 :a是一个指针,所以大小为4
cout<<sizeof(*a)<<endl;----- 72 :4*3*6 ,a指向一个2维数组,而数组中的元素也是指针
cout<<sizeof(**a)<<endl; ----- 24 :4*6,数组的第2维的大小
cout<<sizeof(***a)<<endl; ----- 4 :数组中元素的大小
cout<<sizeof(****a)<<endl;----- 8 :数组中元素指向内容为double,所以8
再看一个:
char sa[1000] = "abcdef";
char* sb = "asdassaasabcdeft";
const char* sc = "aaaaaaaaaaaaaaaaaaaa";
cout<<"sizeof(sa):"<<sizeof(sa)<<endl;
cout<<"sizeof(sb):"<<sizeof(sb)<<endl;
cout<<"sizeof(sc):"<<sizeof(sc)<<endl;
cout<<"sizeof('abcdefghijklmn'):"<<sizeof("abcdefghijklmn")<<endl;
sa是数组,输出数组大小1000
sb,sc都是指针,输出大小4
sizeof(“abcdefghijklmn”)输出字符串的大小
输出结果如下:
sizeof(sa):1000
sizeof(sb):4
sizeof(sc):4
sizeof('abcdefghijklmn'):15