這里有一個陷阱
1. int *d = new int[10];
2.
3. cout《sizeof(d)《endl; // 4
4.
d是我們常說的動態(tài)數(shù)組,但是他實質(zhì)上還是一個指針,所以sizeof(d)的值是4。
再分析下面的多維數(shù)組問題
1. double* (*a);
2.
3. cout《sizeof(a)《endl; // 4
4. cout《sizeof(*a)《endl; // 72
5. cout《sizeof(**a)《endl; // 24
6. cout《sizeof(***a)《endl; // 4
7. cout《sizeof(****a)《endl; // 8
很費解的多維數(shù)組定義,改用typedef定義如下
1. typedef (double *) ArrType ;
2. ArrType * a;
現(xiàn)在是不是很清晰了?(關(guān)于typedef用法的探討,請見文章)
1. typedef (double *) ArrType ;
2. ArrType * a;
3.
4. cout 《 sizeof(a) 《 endl;//4
5. cout 《 sizeof(*a) 《 endl;// double * : 3*6*sizeof(double *) = 72
6. cout 《 sizeof(**a) 《 endl;// double * : 6*sizeof(double *) = 24
7. cout 《 sizeof(***a) 《 endl;// sizeof(double *) = 4
8. cout 《 sizeof(****a) 《 endl;// sizeof(double) = 8
a是一個很奇怪的定義,他表示一個指向 double*類型數(shù)組的指針,此3×6數(shù)組中存儲的是指向double的指針。既然是指針,所以sizeof(a)就是4
既然a是指向double*類型的指針
*a就表示一個double*的多維數(shù)組類型,因此sizeof(*a)=3*6*sizeof(double*)=72
**a表示一個double*類型的數(shù)組,所以sizeof(**a)=6*sizeof(double*)=24
***a就表示其中的第一個元素,也就是double*了,所以sizeof(***a)=4
****a,就是一個double了,所以sizeof(****a)=sizeof(double)=8
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |