创新工场一道笔试题

#include <stdio.h>

union A{
int i;
char c[2];
};

int main(){
union A t;
t.c[0] = 10;
t.c[1] = 1;
printf("%d", t.i);
return 0;

}


这个程序输出是什么?

(gdb) l
8    
9    int main(int argc, const char *argv[])
10    {
11        union A t;
12        
13        t.c[0] = 10;
14        t.c[1] = 1;
15    
16        printf("%d\n", t.a);
17        return 0;
(gdb) b 13
Note: breakpoint 2 also set at pc 0x100000f07.
Breakpoint 3 at 0x100000f07: file test.c, line 13.
(gdb) r
Starting program: /Users/lee/MyProgram/test/test 

Breakpoint 2, main (argc=1, argv=0x7fff5fbff9d0) at test.c:13
13        t.c[0] = 10;
(gdb) p t
$5 = {
  a = 1606416824, 
  c = "??"
}
(gdb) x/4xb &t
0x7fff5fbff9a0:    0xb8    0xf9    0xbf    0x5f
(gdb) n
14        t.c[1] = 1;
(gdb) p t
$6 = {
  a = 1606416650, 
  c = "\n?"
}
(gdb) x/4xb &t
0x7fff5fbff9a0:    0x0a    0xf9    0xbf    0x5f
(gdb) n
16        printf("%d\n", t.a);
(gdb) p t
$7 = {
  a = 1606353162, 
  c = "\n\001"
}
(gdb) x/4xb &t
0x7fff5fbff9a0:    0x0a    0x01    0xbf    0x5f
(gdb) n
1606353162


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值