這里有一個(gè)陷阱
1. int *d = new int[10];
2.
3. cout《sizeof(d)《endl; // 4
4.
d是我們常說的動(dòng)態(tài)數(shù)組,但是他實(shí)質(zhì)上還是一個(gè)指針,所以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
很費(fèi)解的多維數(shù)組定義,改用typedef定義如下
1. typedef (double *) ArrType ;
2. ArrType * a;
現(xiàn)在是不是很清晰了?(關(guān)于typedef用法的探討,請(qǐng)見文章)
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是一個(gè)很奇怪的定義,他表示一個(gè)指向 double*類型數(shù)組的指針,此3×6數(shù)組中存儲(chǔ)的是指向double的指針。既然是指針,所以sizeof(a)就是4
既然a是指向double*類型的指針
*a就表示一個(gè)double*的多維數(shù)組類型,因此sizeof(*a)=3*6*sizeof(double*)=72
**a表示一個(gè)double*類型的數(shù)組,所以sizeof(**a)=6*sizeof(double*)=24
***a就表示其中的第一個(gè)元素,也就是double*了,所以sizeof(***a)=4
****a,就是一個(gè)double了,所以sizeof(****a)=sizeof(double)=8
相關(guān)推薦:
2012年下半年計(jì)算機(jī)等級(jí)考試報(bào)名時(shí)間及入口匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |