struct A {char a; int b; short c}
时间: 2024-03-28 11:38:13 浏览: 130
在 32 位系统中,`struct A {char a; int b; short c}` 的大小为 8 字节。
这是因为在 32 位系统中,一个字节的对齐方式是按照 4 字节对齐的。结构体中最大的成员变量是 `int`,它需要 4 字节对齐,因此结构体中的偏移量需要是 4 的倍数。而 `char` 和 `short` 变量只需要 1 和 2 字节的空间,分别占用 1 和 2 个字节的空间。因此,编译器在 `char` 和 `short` 变量之间填充了 2 个字节的空间,以保证结构体中的偏移量是 4 的倍数,从而满足对齐要求。因此,`struct A {char a; int b; short c}` 的大小为 8 字节。
相关问题
struct student { char a; short b; int c; } 所占空间
在大多数机器上,结构体的对齐是按照成员大小的整数倍来进行的。在这个结构体中,char 类型的变量 a 占 1 字节,short 类型的变量 b 占 2 字节,int 类型的变量 c 占 4 字节。因此,每个成员的大小加起来是 1+2+4=7 字节。
但是,由于成员的对齐规则,可能会在每个成员之后插入一些填充字节,以保证下一个成员的地址是它大小的整数倍。通常情况下,填充字节的大小取决于编译器和机器的类型。
假设这个结构体中的成员对齐规则是按照成员大小的整数倍进行的,那么这个结构体的大小就是成员总大小的整数倍。在这个例子中,成员总大小是 7 字节,如果按照成员大小的整数倍进行对齐,那么这个结构体的大小就是 8 字节。
因此,在大多数机器上,这个结构体的大小为 8 字节。
定义struct (int a; char b[12]; short c;} temp;则temp->c=
这个题目有一些问题,应该是定义一个结构体类型 temp,而不是定义一个结构体变量 temp。如果我们改为“定义一个结构体变量 temp”,则答案为:temp.c=
但是,如果我们按照题目本身的意思,定义一个结构体类型 temp,则答案为无法确定,因为结构体类型只是一个模板或者说是一个蓝图,我们需要使用这个模板来定义一个具体的结构体变量,才能够对结构体变量的成员进行赋值操作。因此,正确的代码应该是:
```
struct temp {
int a;
char b[12];
short c;
};
struct temp my_temp; // 声明一个结构体变量 my_temp
my_temp.c = 0; // 对 my_temp 的成员变量 c 进行赋值操作
```
其中,my_temp.c=0; 表示将 my_temp 结构体变量的成员 c 赋值为0。
阅读全文