C语言中结构体大小的计算

4620阅读 0评论2018-04-15 Tay_linux
分类:LINUX

关于结构体所占用的长度,有两个原则:

1、各成员变量存放的起始地址相对于结构体的起始地址的偏移量必须为该变量的类型所占 用字节的倍数。

2、结构体的大小必须为成员中最大字节的整数倍

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct a{
  4.     int a;
  5.     char b;
  6.     int c;
  7. };

  8. struct b{
  9.     char *a;
  10.     short b;
  11.     char c;
  12.     int d;
  13.     char e;
  14. };

  15. int main(void)
  16. {
  17.     struct a a;
  18.     struct b b;
  19.     printf("a:%p b:%p c:%p sizeof(struct a):%d\n", &a.a, &a.b, &a.c, sizeof(struct a));
  20.     printf("a:%p b:%p c:%p d:%p e:%p sizeof(struct b):%d\n", &b.a, &b.b, &b.c, &b.d, &b.e, sizeof(struct b));
  21.     return 0;


执行结果

a:0xbfe5f6b0 b:0xbfe5f6b4 c:0xbfe5f6b8 sizeof(struct a):12

a:0xbfe5f6bc b:0xbfe5f6c0 c:0xbfe5f6c2 d:0xbfe5f6c4 e:0xbfe5f6c8 sizeof(struct b):16


上一篇:链表
下一篇:ELF文件头部分析