C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节

举报
chenyu 发表于 2021/07/26 23:53:59 2021/07/26
【摘要】 1、问题 1)、结构体大小    结构体成员的内存分配满足下面三个条件   2 结构体第一个成员的地址和结构体的首地址相同   3 结构体每个成员地址相对于结构体首地址的偏移量是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节   4 结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加...

1、问题

1)、结构体大小

   结构体成员的内存分配满足下面三个条件
  2 结构体第一个成员的地址和结构体的首地址相同
  3 结构体每个成员地址相对于结构体首地址的偏移量是该成员大小的整数倍,如果不是则编译器会在成员之间添加填充字节
  4 结构体总的大小要是其成员中最大size的整数倍,如果不是编译器会在其末尾添加填充字节

 

2)、成员变量位置距离结构开始存储的位置偏移字节

我们用offsetof函数

 

 

 

 

 

2、测试Demo

 


  
  1. #include <stdio.h>
  2. #include <stddef.h>
  3. #define PRODUCT_SIZE 20
  4. struct A
  5. {
  6. int a;
  7. char b;
  8. char d;
  9. };
  10. struct AA
  11. {
  12. char a;
  13. int b;
  14. char c;
  15. };
  16. struct B
  17. {
  18. char a;
  19. double b;
  20. char c;
  21. char d[9];
  22. int e;
  23. };
  24. typedef struct
  25. {
  26. char product[PRODUCT_SIZE];
  27. int qunatity;
  28. float unit_price;
  29. float total_amount;
  30. char s;
  31. } Transaction;
  32. struct C
  33. {
  34. int a;
  35. char b;
  36. short c;
  37. double d;
  38. int f;
  39. };
  40. int main()
  41. {
  42. printf("float size is %d\n", sizeof(float));
  43. printf("short size is %d\n", sizeof(short));
  44. printf("long size is

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/78650124

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。