首页 > 试题广场 >

32位机器上,以下结构的sizeof(P)为struct A

[单选题]
32位机器上,以下结构的sizeof(P)为()
struct A {
    int a;
    char b;
    int c;
    char d;
};
struct P {
    struct A w[2];
    short b;
    struct A* p;
}


  • 26
  • 38
  • 40
  • 30
/*考察结构体对齐和填充:
结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如果不是,编译器会自动在成员间填充。*/
struct A {
int a;                            //4 bytes
char b;                        //1 bytes
//char pad[3]               //3 bytes
int c;                           //4 bytes
char d;                       //1 bytes
//char pad[3]              //3 bytes
}                            // total = 16 bytes

/* P中有结构体A的成员,但是计算时按照A中数据类型确定的*/

struct P {
struct A w[2];    // 2 * 16 bytes
short b;            //2 bytes
//char pad[2]    //2 bytes
struct A* p;      //4 bytes
}  // total = 40 bytes
发表于 2018-09-07 07:39:24 回复(10)
整形4字节 字符1字节 short2字节 指针地址4字节 但是结构体中按照最大的成员变量划分空间,比如结构体A中最大成员为int,char类型系统会补足3字节空间
发表于 2021-09-16 20:45:44 回复(0)

A的字节大小:

4,1,4,1,》》4,4,4,4,--》》16字节

P的字节大小:

16*2,2,4》》32,4,4》》40字节 (A的成员最大字节是4)

 

变式:

struct A {

int a;

char b;

int c;

char d;

long long l;

};//4 1 4 1 8 >>24

struct P {

struct A w[2];

short b;

struct A* p;

};//48 2 4 >> 48 4 4 >>56 (满足long long 8的倍数)

发表于 2020-07-21 20:44:49 回复(0)
/*考察结构体对齐和填充:
结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如果不是,编译器会自动在成员间填充。*/
struct A {
int a;                            //4 bytes
char b;                        //1 bytes
//char pad[3]               //3 bytes
int c;                           //4 bytes
char d;                       //1 bytes
//char pad[3]              //3 bytes
}                            // total = 16 bytes

/* P中有结构体A的成员,但是计算时按照A中数据类型确定的*/

struct P {
struct A w[2];    // 2 * 16 bytes
short b;            //2 bytes
//char pad[2]    //2 bytes
struct A* p;      //4 bytes
}  // total = 40 bytes
发表于 2022-05-16 20:14:31 回复(0)
struct P {
    struct A w[2];
    short b;
    struct A* p;
}

这题目不对吧,和解释里少两个char类型的数据

发表于 2022-09-21 14:07:16 回复(0)
我考虑过struct A的16作为最长 结果还是按int最长算的
发表于 2022-04-09 00:08:31 回复(0)
结构体指针只占4个字节吗
发表于 2020-12-06 22:51:16 回复(4)
我想问下,如果结构体A大小时17,那么计算下面结构体B时,17要补齐为4的倍数吗
发表于 2022-09-27 14:04:06 回复(1)