结构体难点:内存对齐与补齐

博客围绕结构体展开,定义结构体a后运行sizeof(a),得到的结果并非预期。博客将对这一问题产生的原因进行逐一分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题来源

定义一个结构体:a
运行sizeof(a)
得到的结果不是自己想要的?
为什么?

一个一个分析

#include <stdio.h>

struct number_1
{
    int a;
    int b;
    int c;
}st1;

struct number_2
{
    char a;
    int b;
    double c;
}st2;

struct number_3
{
    char a;
    int b;
}st3;

struct number_4
{
    char a;
    char b;
    char c;
    int d;
}st4;

int main(int argc, char const *argv[]) {
  printf("st1:\n");
  printf("%d\n",sizeof(st1.a)+sizeof(st1.b)+sizeof(st1.c));
  printf("%d\n",sizeof(st1));
  printf("st2:\n");
  printf("%d\n",sizeof(st2.a)+sizeof(st2.b)+sizeof(st2.c));
  printf("%d\n",sizeof(st2)); //刚好是double类型的二倍
  printf("st3:\n");
  printf("%d\n",sizeof(st3)); // int类型的二倍

  printf("st4:\n");
  printf("%d\n",sizeof(st4)); // int类型的二倍
  return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值