c语言 结构体位域问题

发布网友 发布时间:2022-04-24 01:50

我来回答

1个回答

热心网友 时间:2023-11-10 23:19

c存在第三个字节

sizeof结构体,这个要看结构体内变量是如何定义的,结构体存放数据有个对齐原则,找到占用最大字节的变量,然后都向它对齐,比如bool和char类型占用一个字节,short占两个字节,int,float为4个字节,double为八个字节。

定义的顺序不同,sizeof的结果不同。我给你举个例子。

struct A{
    int a;
    char b;
    char c;
};


sizeof(A)应该为4+1+1,但是需要对齐,所以这个值就是 8  

图1

这个是struct A的变量存储

struct B{
    char a;
    int b;
    char c;
};


sizeof(B) 这个值就是12

图2

这个是struct B的变量存储 

追问请问一下c存在第三字节的哪几位
如果是下面这种结构
例子1:
struct A{
int a:8;
int b:4;
int c:3;
int d:10;

};
sizeof(A)=4 d的数值会放在哪呢? 会溢出吗
例子2:例子1加上 int e:5;
sizeof(A)=4
例子3:例子2 加上int f:6;
sizeof(A)=8;
为什么例子2和3会得出这样的结果?

热心网友 时间:2023-10-19 22:21

c存在第三个字节

sizeof结构体,这个要看结构体内变量是如何定义的,结构体存放数据有个对齐原则,找到占用最大字节的变量,然后都向它对齐,比如bool和char类型占用一个字节,short占两个字节,int,float为4个字节,double为八个字节。

定义的顺序不同,sizeof的结果不同。我给你举个例子。

struct A{
    int a;
    char b;
    char c;
};


sizeof(A)应该为4+1+1,但是需要对齐,所以这个值就是 8  

图1

这个是struct A的变量存储

struct B{
    char a;
    int b;
    char c;
};


sizeof(B) 这个值就是12

图2

这个是struct B的变量存储 

追问请问一下c存在第三字节的哪几位
如果是下面这种结构
例子1:
struct A{
int a:8;
int b:4;
int c:3;
int d:10;

};
sizeof(A)=4 d的数值会放在哪呢? 会溢出吗
例子2:例子1加上 int e:5;
sizeof(A)=4
例子3:例子2 加上int f:6;
sizeof(A)=8;
为什么例子2和3会得出这样的结果?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com