首页 > 试题广场 >

以下代码打印的结果是(假设运行在64位计算机上):struc

[单选题]
以下代码打印的结果是(假设运行在64位计算机上): 
struct st_t {  
       int status;  
        short *pdata;  
        char errstr[32];  
        };  
       st_t st[16];  
       char *p=(char *)( str[2].errstr + 32 );  
      printf("%d", (p-(char *)(str)));  
}
  • 32
  • 120
  • 114
  • 144
st_t st[16]应该为st_t str[16],写错了
64位需要8字节实现对齐,int占四字节,填充到8字节,short占8字节,char[32]需要32字节,正好为8整数倍,所以一个结构体占用48B,str[2]的开头为止,偏移了48B*2=96B,再到errstr又偏移了16B,所以为112B偏移,减去(char *)(str),即减掉开头取出偏移,结果为str[2].errstr + 32代表的偏移量:112B+32B =144B
发表于 2025-08-29 17:22:12 回复(0)