加入收藏 收藏网站 设为首页 设为首页
招生考试网
学历类| 阳光高考 研 究 生 自学考试 成人高考 专 升 本 中考会考 外语类| 四 六 级 职称英语 商务英语 公共英语 日语能力
资格类| 公 务 员 报 关 员 银行从业 司法考试 导 游 证 教师资格 财会类| 会 计 证 经 济 师 会计职称 注册会计 税 务 师
工程类| 一级建造 二级建造 造 价 师 造 价 员 咨 询 师 监 理 师 医学类| 卫生资格 执业医师 执业药师 执业护士 国际护士
计算机| 等级考试 软件水平 应用能力 其它类| 书画等级 美国高考 驾 驶 员 书法等级 少儿英语 报 检 员 单 证 员 出国留学
 招生考试网 - 计算机等级考试 - 考试辅导 - 正文

 
计算机二级C语言:C++sizeof使用规则及陷阱分析(1)
来源:fjzsksw.com 2009-11-6 编辑:yangmeiling 【字体:小 大】

1 cout << sizeof(*a) << endl;//1

  2 cout << sizeof(*b) << endl;//1

  3 cout << sizeof(*c) << endl;//4

  4 cout << sizeof(*d) << endl;//3

  特别如果字符数组表示字符串的话,数组末自动插入的'\0',在sizeof时不能遗漏

  数组a的大小在定义时未指定,编译时给它分配的空间是按照初始化的值确定的,也就是7。c是多维数组,占用的空间大小是各维数的乘积,也就是6。可以看出,数组的大小就是他在编译时被分配的空间,也就是各维数的乘积*数组元素的大小。

  结论:数组的大小是各维数的乘积*数组元素的大小。

  这里有一个陷阱:

  1 int *d = new int[10];

  2

  3 cout<<sizeof(d)<<endl; // 4

  4

  d是我们常说的动态数组,但是他实质上还是一个指针,所以sizeof(d)的值是4。

  再分析下面的多维数组问题:

  1 double* (*a)[3][6];

  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

  很费解的多维数组定义,改用typedef定义如下:

  1 typedef (double *) ArrType [3][6];

  2 ArrType * a;

  现在是不是很清晰了?(关于typedef用法的探讨,请见文章)

  1 typedef (double *) ArrType [3][6];

  2 ArrType * a;

  3

  4 cout << sizeof(a) << endl;//4

  5 cout << sizeof(*a) << endl;// double * [3][6] : 3*6*sizeof(double *) = 72

  6 cout << sizeof(**a) << endl;// double * [6] : 6*sizeof(double *) = 24

  7 cout << sizeof(***a) << endl;// sizeof(double *) = 4

  8 cout << sizeof(****a) << endl;// sizeof(double) = 8

  a是一个很奇怪的定义,他表示一个指向 double*[3][6]类型数组的指针,此3×6数组中存储的是指向double的指针。既然是指针,所以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



 
网站版权与免责声明
①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
最新文章
热门文章

报名考试
全国 | 黑龙江 | 吉林 | 辽宁 | 内蒙古
青海 | 宁夏 | 甘肃 | 新疆 | 陕西
西藏 | 北京 | 天津 | 河北 | 山东
江苏 | 安徽 | 河南 | 上海 | 浙江
福建 | 广东 | 山西 | 湖南 | 湖北
江西 | 广西 | 海南 | 云南 | 贵州
四川 | 重庆
分省高校计算机考试
黑龙江 | 吉林 | 辽宁 | 内蒙古 | 河北
北京 | 天津 | 新疆 | 甘肃 | 宁夏
青海 | 陕西 | 山西 | 河南 | 山东
江苏 | 安徽 | 浙江 | 福建 | 广东
海南 | 广西 | 江西 | 湖北 | 湖南
四川 | 上海 | 重庆 | 贵州 | 云南
西藏
成绩查询
报考指南
试题答案
模拟试题
考试辅导
计算机一级 | 计算机二级 | 计算机三级 | 计算机四级
经验交流
高校计算机