經典問題:
double* (*a)[3][6];
cout<<sizeof(a)<<endl; // 4 a為指針
cout<<sizeof(*a)<<endl; // 72 *a為一個有3*6個指針元素的數組
cout<<sizeof(**a)<<endl; // 24 **a為數組一維的6個指針
cout<<sizeof(***a)<<endl; // 4 ***a為一維的第一個指針
cout<<sizeof(****a)<<endl; // 8 ****a為一個double變量
問題解析:a是一個很奇怪的定義,他表示一個指向double*[3][6]類型數組的指針。既然是指針,所以sizeof(a)就是4。
既然a是執行double*[3][6]類型的指針,*a就表示一個double*[3][6]的多維數組類型,因此sizeof(*a)=3*6*sizeof(double*)=72。同樣的,**a表示一個double*[6]類型的數組,所以sizeof(**a)=6*sizeof (double*)=24。***a就表示其中的一個元素,也就是double*了,所以sizeof(***a)=4。至于****a,就是一個double了,所以sizeof(****a)=sizeof(double)=8