首页 >> 大全

对结构的探究

2023-10-24 大全 26 作者:考证青年

结构,我们没有像对数组那样使用和&这两个工具来探究一下。我们把这个任务留给你。建议可以做这么几个方向的探究:

不同的成员变量组合,结构的如何,是否正好等于全部成员的之和?

结构内的成员之间是否连续,相邻的成员的地址的差是否等于对应的成员的?

探究结构的稳定性ppt__探究结构的稳定性公开课

第一个显然是不等于;

第二个说明内存也不是连续的。那到底是怎样存储的呢?

    #include /*探究问题: 1、不同的成员变量组合,结构的sizeof如何,是否正好等于全部成员的sizeof之和?2、结构内的成员之间是否连续,相邻的成员的地址的差是否等于对应的成员的sizeof?date:2018.05.24 edit by qjx*/struct date{float x;char y;double z;};main(){struct date p1={34,'a',3.0};printf("p1结构体占用空间:%d\n",sizeof(p1));printf("p1.x占用空间:%d\n",sizeof(float));printf("p1.y占用空间:%d\n",sizeof(char));printf("p1.z占用空间:%d\n",sizeof(double));printf("p1.x地址:%d\n",&p1.x);printf("p1.y地址:%d\n",&p1.y);printf("p1.z地址:%d\n",&p1.z);}

应该是这样存储的:

结构体中所需存储空间最小的元素会按照次小元素的类型分配内存空间,应该就是所谓的内存对齐

规则:

1、数据成员对齐规则:结构()(或联合(union))的数据成员,第一个数据成员放在为0的地方,以后每个数据成员的对齐按照# pack指定的数值和这个数据成员自身长度中,比较小的那个进行。

2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照# pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

需要注意的是不同的编译器对其规则不同。

下面的程序和之前的程序对比可以得到以上的结论。

_探究结构的稳定性公开课_探究结构的稳定性ppt

    #include  /*探究问题: 1、不同的成员变量组合,结构的sizeof如何,是否正好等于全部成员的sizeof之和?2、结构内的成员之间是否连续,相邻的成员的地址的差是否等于对应的成员的sizeof?date:2018.05.24 edit by qjx*/struct date{double x;char y;double z;};main(){struct date p1={34,'a',3.0};printf("p1结构体占用空间:%d\n",sizeof(p1));printf("p1.x占用空间:%d\n",sizeof(double));printf("p1.y占用空间:%d\n",sizeof(char));printf("p1.z占用空间:%d\n",sizeof(double));printf("p1.x地址:%d\n",&p1.x);printf("p1.y地址:%d\n",&p1.y);printf("p1.z地址:%d\n",&p1.z);}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了