sizeof 位域 结构体
sizeof()功能:计算数据空间的字节数
1.与 strlen()比较
strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。
而 sizeof 计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。
2.指针与静态数组的 sizeof 操作
指针均可看为变量类型的一种。所有指针变量的 sizeof 操作结果均为 4。
注意:int *p; sizeof(p)=4;
但 sizeof(*p...
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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。