struct One{
    double d;
    char c;
    int i;
}
struct Two{
    char c;
    double d;
    int i;
}

在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是

  • 16 24,16 24
  • 16 20,16 20
  • 16 16,16 24
  • 16 16,24 24


题目解析:

C/C++学习(3)#pragma pack(4) vs.  #pragma pack(8)_#pragma


链接:

https://www.nowcoder.com/questionTerminal/e2ef573a02bd46659fd683a805284c80


来源:牛客网



(实际占位用下划线表示,补位没有下划线)

#pragma pack(4)时:
 
One的大小: 
 
口口口口 d 

 
 
 口口口口 d 

 
口口口口   c (补3位对齐)
 
口口口口 i 

 
 
 共:4+4+4+4 = 16; 

 
 
 Two的大小: 

 
口口口口  
  c (补3位对齐)
 
 
 
  口口口口 d 
 
 
 
口 口口口 d 
 
 
口口口口 i 
 
 
 
 共:4+4+4+4 = 16; 

 

  ================================ 

 
#pragma pack(8)时:
 
One的大小: 
 
 
口口口口  
  口口口口 
   d 
 
 
 
 
  口 口口口 口口口口 c占1位,i紧挨着占4位,再补3位对齐 
 
 
 
 共:8+8 = 16; 

 
 
 Two的大小: 

 
口口口口口口口口    c(补7位对齐)
 
 
 
  口口口口 口口口口 d 
 
 
 
 
  口 
  口口口口口口口 
   i (补4位对齐)
 
 
共:8+8+8 = 24; 
 
 

   选C