结构体变量中,int占多少字节?

2025-03-30 14:06:32
推荐回答(5个)
回答1:

        在结构体变量中int占多少字节,需要考虑内存对齐问题。
 

         内存对齐的原因:    

         1)某些平台只能在特定的地址处访问特定类型的数据;    

         2)提高存取数据的速度。比如有的平台每次都是从偶地址处读取数据,对于一个int型的变量,若从偶地址单元处存放,则只需一个读取周期即可读取该变量;但是若从奇地址单元处存放,则需要2个读取周期读取该变量。   

        我们以例子来说明对齐方式吧:

例一、char , int 对齐;

#include 
struct node
{
  char a;
  int b;
};
int main()
{
  struct node QING;
  printf("%d\n",sizeof(QING));
  return 0;
}

输出结果: 8  

解释:结构体中(注意变量定义的顺序),char 是1个字节,int 是4 个字节,结构体字节对齐:char 和 int对齐。所以将char补齐到4个字节。

所以最后结构体所占字节: 4 + 4 = 8;

例二、char *, int 对齐;

#include 
struct node
{
  char a[5];
  int b;
};
int main()
{
  struct node QING;
  printf("%d\n",sizeof(QING));
  return 0;
}

输出结果: 12  

解释:结构体中char a[4],已经和下面的int 对齐了,可是还剩下一个char a[1]这个也需要补齐到int (4)。

所以最后结果: 8 + 4 = 12

例三、char , int , double 对齐;

#include 
struct node
{
  char a;
  int b;
  double c;
};

int main()
{
  struct node QING;
  printf("%d\n",sizeof(QING));
  return 0;
}

输出结果: 16  

解释:结构体中char , int 两个字节数(整体),与下面的double对齐。所以char ,int 整体字节数要凑够8 。

所以最后结果: 8 + 8 = 16

例四、char ,double, int对齐;

#include 

struct node
{
  char a;
  double c;
  int b;
};

int main()
{
  struct node QING;
  printf("%d\n",sizeof(QING));
  return 0;
}

输出结果: 24  

解释:比较例三,我们发现只是结构体里面的定义顺序改变了,却造成了结果的不同。那么这是为什么呢?

 其实是这样的,上面的char 要和double对齐,所以char
字节要补齐到double(8),然后double不可能和下面的int对齐吧?因为double本来就比int大,所以不可能对齐,那么就只有int和
double对齐了哦,所以int也要补齐到double(8)。

所以最后结果: 8 + 8 + 8 = 24


所以说在结构体中int类型变量所占字节要看特定的结构。

以上代码win7_64bit  Devcpp 5.5.3环境下测试的。

回答2:

目标平台上编译器把int看成是几字节的就是几字节.
早期的dos上的一些编译器会把int看成是2字节的.
而现在最常见的32位和64位系统里通常把int看成是4字节的.当然,int如何理解完全取决于编译器.

结构体中int是一个成员,占的字节数与其它地方一致.为2个或4个字节.

回答3:

要看什么样的编译器了,如果是turbo环境下的,int是两个字节,如果是vC++上的就是4个字节了

回答4:

要看你的系统是16位还是32位,

16位系统,int占两个字节

32位系统 int占4字节

回答5:

int 一般占4字节,结构体中也是, 传说某些编译器上会是2字节...(没亲眼见过)。