C语言:sizeof(结构体)

对于如下程序:

struct node{
       char a;
}node1;

sizeof(node1)显然大小为1;但是如下程序:

struct node{
       char a;
       int  b;
}node1;

sizeof(node1)大小却为8,因为结构体变量中第一个成员的地址就是结构体变量的首地址。因此,第一个成员i的偏移量为0。第二个成员c的偏移量是第一个成员的偏移量加上第一个成员的大小,依次类推。
另外:由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则:一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被认为是任何数的整数倍) 二、结构体大小必须是所有成员大小的整数倍。因此最宽的成员大小为此偏移量。又有如下程序:

struct node{
       char a;
     char b;
     int c;
}node1;
sizeof(node1)大小却为8,那么对于如下程序呢?

typedef struct node{
       char a;
      struct node *next;
}node1;
typedef struct node{
       char a;
      node1 c;
}node2;
sizeof(node1)大小为8,要知道指针也是变量,占用4个字节。而sizeof(node2)呢?它的字节为12。偏移量取node1中偏移量与char字节大小取最大值。

另外,顺便提下:

typedef union //定义共用体 
{ 
    long i; //long 四个字节
   int k[5]; //int 四个字节   4*5 = 20
    char c; //char 一个字节:
}DATE; 


上面的结构体是联合:联合的结构体取中间最大的就可以了,因为他们是公用的,所以找到最大的空间,那么小的也能装在大的里面,如果你取小的,那么大的就不能装在小的里面了;

分析一下:上面最大的是:20此外,可以用#pragma pack(n)来决定偏移量的大小,n为此偏移量。




















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值