结构体

  1,结构体即为多个基本数据类型组合而成的数据类型。结构体本质上同int等一样同为数据类型,可以定义变量,内部成员不能直接赋值。

struct Man
{
int age = ;
int score = ;
};

    上面是错误的。正确写法如下:

struct Man
{
int age; //这样就好了
int score;
}; int main()
{
struct Man man1 = {,};
}

  2,结构体常同typedef类型重命名一同使用,如下:

typedef struct Man
{
int age; //这样就好了
int score;
}MAN; int main()
{
MAN man1 = {,};
}

  3,结构体内存对齐

typedef struct Man
{
char age; //这样就好了
int score;
}MAN; int main()
{
printf("%d",sizeof(MAN));
}

  以上代码输出的值为8,而不是直观意义上的5,这是因为结构体中的成员是对齐的,这里按4字节对齐。当CPU访问正确对齐的数据时,它的运行效率最高,数据对齐不是内存结构的一部分,而是CPU结构的一部分。

  结构体成员对齐是按照类型大小对齐的,而结构体按照长度最大的类型对齐。如成员中char按1字节对齐,short按2字节对齐,int按照4字节对齐等,这里的结构体成员最长的是int为4字节,所以这个结构体按照4字节对齐。

  

联合体

  1,联合体本质上为不同数据类型共享存储空间,此空间要大到足够容纳最"宽"的成员。它的所有成员相对于基地址的偏移量都为0。

union U
{
char s[];
int n;
double d;
};

  2,联合体通常与结构体共用,通过不同方式给变量赋值。

union REG
{
struct
{
unsigned short a;
unsigned short b;
} H;
  unsigned int R;
} Reg;

  上面可以通过Reg.R给变量赋值,也可以分别通过Reg.H.a、Reg.H.b分别赋值,要注意字节序。

最新文章

  1. 在servlet中用spring @Autowire注入
  2. 一款全兼容的播放器 videojs
  3. iOS常用设计模式笔记
  4. vCenter Server Appliance
  5. CMD和AMD区别的概括
  6. 最简单的jQuery插件
  7. Mac OS下配置Eclipse C++的方法
  8. Eclipse下编写的web项目部署到tomcat下
  9. 通过字符串寻找与字符串一致的model的属性
  10. Jade之Interpolation
  11. html5 drap & drop
  12. 关于AVD无法使用问题
  13. net.sf.json.JSONException: java.lang.NoSuchMethodException
  14. 明晰三种常见存储技术:DAS、SAN和NAS
  15. Linux C OSS音频编程
  16. Game Engine Architecture 7
  17. 删除Docker中所有已停止的容器
  18. 【Java工具方法】给集合按数量分组
  19. cobbler网络装机
  20. C# JSON 序列化

热门文章

  1. [Noip模拟题]统计方案​
  2. 关于 js中的arguments 对象
  3. VLAN-1-VLAN配置
  4. 转 OUI and OPatch Do Not Recognize JDK/JRE on Windows
  5. python学习之内部函数:
  6. chrome浏览器好用的一些插件
  7. kafka安装和使用
  8. silverlight GPS监控,视频监控界面
  9. WIN32项目中MFC程序窗口居中
  10. powershell 根据错误GUID查寻错误详情