为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

sizeof 位域 结构体

2013-08-02 4页 pdf 67KB 21阅读

用户头像

is_456613

暂无简介

举报
sizeof 位域 结构体 sizeof()功能:计算数据空间的字节数 1.与 strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而 sizeof 计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的 sizeof 操作 指针均可看为变量类型的一种。所有指针变量的 sizeof 操作结果均为 4。 注意:int *p; sizeof(p)=4; 但 sizeof(*p...
sizeof 位域 结构体
sizeof()功能:计算数据空间的字节数 1.与 strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而 sizeof 计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数示。 2.指针与静态数组的 sizeof 操作 指针均可看为变量类型的一种。所有指针变量的 sizeof 操作结果均为 4。 注意:int *p; sizeof(p)=4; 但 sizeof(*p)相当于 sizeof(int); 对于静态数组,sizeof 可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于 4*10=40; sizeof(b)等于 6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于 4} 经典问题: double* (*a)[3][6]; cout<说明
一下:首先,CPU 判断结构体 的对界,根据上一节的结论,s1 和 s2 的对界都取最大的元素类型,也就是 double 类型的对界 8。然后开始摆放每个元素。 对于 s1,首先把 a 放到 8 的对界,假定是 0,此时下一个空闲的地址是 1,但是下一个元素 d 是 double 类型,要放到 8 的对界上,离 1 最接近的地址是 8 了,所以 d 被放在了 8,此时下 一个空闲地址变成了 16,下一个元素 c 的对界是 4,16 可以满足,所以 c 放在了 16,此时下 一个空闲地址变成了 20,下一个元素 d 需要对界 1,也正好落在对界上,所以 d 放在了 20, 结构体在地址 21 处结束。由于 s1 的大小需要是 8 的倍数,所以 21-23 的空间被保留,s1 的 大小变成了 24。 对于 s2,首先把 a 放到 8 的对界,假定是 0,此时下一个空闲地址是 1,下一个元素的对界 也是 1,所以 b 摆放在 1,下一个空闲地址变成了 2;下一个元素 c 的对界是 4,所以取离 2 最 近的地址 4 摆放 c,下一个空闲地址变成了 8,下一个元素 d 的对界是 8,所以 d 摆放在 8,所 有元素摆放完毕,结构体在 15 处结束,占用总空间为 16,正好是 8 的倍数。 这里有个陷阱,对于结构体中的结构体成员,不要认为它的对齐方式就是他的大小,看下面的 例子: struct s1 { char a[8]; }; struct s2 { double d; }; struct s3 { s1 s; char a; }; struct s4 { s2 s; char a; }; cout<
/
本文档为【sizeof 位域 结构体】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索