字节 | short | int | float | long | double | long long | |
32位 | 2 | 4 | 4 | 4 | 4 | 8 | 8 |
位 | 2 | 4 | 4 | 8 | 8 | 8 | 8 |
*有无unsigned修饰都一样
double* (*a)[3][6];
cout<<sizeof(a)<<endl; // 4
cout<<sizeof(*a)<<endl; // 72
cout<<sizeof(**a)<<endl; // 24
cout<<sizeof(***a)<<endl; // 4
cout<<sizeof(****a)<<endl; // 8
5、结构体(编译器考虑默认8字节对齐的情况下):
由于结构体的成员可以是复合类型,比如另外一个结构体,所以在寻找最宽基本类型成员时,应当包括复合类型成员的子成员,而不是把复合成员看成是一个整体。但在确定复合类型成员的偏移位置时则是将复合类型作为整体看待。
举例理解:
找S3中最长成员时,将S1打散,找S1、S3中所有基础变量最长的,以其长度为S3对齐字节数:int 4
确定S3对齐字节数后,挨个放置S3成员变量时,将S1看作一个整体(8字节复合变量)一次性存放,并且S1的对齐方式为其自身对齐字节数(4字节对齐。S1也是结构体,有自己的对齐字节数,计算偏移量时按照自己的对齐字节数计算)
实验验证正确:
sizeof(s)=32。
举一反三:
sizeof(s)=32;
当然了:
如果S5再加个短于double的变量中double后面,如char或int,则会因为结构体大小要为最长成员整数倍而补齐成40字节(已经实验验证)
最后:
sizeof(结构体) 还和编译器有关,取二者较小者
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务