下面的输出是?
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是一个指针,所以大小为4cout<<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是数组,输出数组大小1000sb,sc都是指针,输出大小4sizeof(“abcdefghijklmn”)输出字符串的大小输出结果如下:sizeof(sa):1000sizeof(sb):4sizeof(sc):4sizeof('abcdefghijklmn'):15