- 论坛徽章:
- 0
|
本帖最后由 wangzhen11aaa 于 2011-10-20 11:03 编辑
Reading symbols from /home/wangzhen/c/union...done.
(gdb) l
2 *
3 */
4 #include<stdio.h>
5 union{
6 int i;
7 char a[2];
8 }x;
9 int main()
10 {
11 x.a[0] = 10;
(gdb) b 5
Breakpoint 1 at 0x80483b5: file union.c, line 5.
(gdb) run
Starting program: /home/wangzhen/c/union
Breakpoint 1, main () at union.c:11
11 x.a[0] = 10;
(gdb) display &x
1: &x = (union {...} *) 0x804963c
(gdb) display &x.i
2: &x.i = (int *) 0x804963c
(gdb) display &x.a
3: &x.a = (char (*)[2]) 0x804963c
(gdb) display &x.a[1]
4: &x.a[1] = 0x804963d ""
(gdb) display &x.a[0]
5: &x.a[0] = 0x804963c ""
(gdb) s
12 x.a[1] = 1;
5: &x.a[0] = 0x804963c "\n"
4: &x.a[1] = 0x804963d ""
3: &x.a = (char (*)[2]) 0x804963c
2: &x.i = (int *) 0x804963c
1: &x = (union {...} *) 0x804963c
(gdb) display x.a[0]
6: x.a[0] = 10 '\n'
(gdb) display x.a[1]
7: x.a[1] = 0 '\000'
(gdb) s
13 printf("%d\n",x.i);
7: x.a[1] = 1 '\001'
6: x.a[0] = 10 '\n'
5: &x.a[0] = 0x804963c "\n\001"
4: &x.a[1] = 0x804963d "\001"
3: &x.a = (char (*)[2]) 0x804963c
2: &x.i = (int *) 0x804963c
1: &x = (union {...} *) 0x804963c
(gdb) display x
8: x = {i = 266, a = "\n\001"}
(gdb) display a[2]
No symbol "a" in current context.
(gdb) display x.a[2]
9: x.a[2] = 0 '\000'
(gdb) display x.a[3]
10: x.a[3] = 0 '\000'
(gdb) display x.i
11: x.i = 266
(gdb) display x.i
12: x.i = 266
(gdb) display &x.a[3]
13: &x.a[3] = 0x804963f ""
(gdb) display &x.a[2]
14: &x.a[2] = 0x804963e ""
(gdb) display &x.a[2]
14: &x.a[2] = 0x804963e ""
(gdb) display x.a[2]
15: x.a[2] = 0 '\000'
(gdb) display x.a[3]
16: x.a[3] = 0 '\000'
7: x.a[1] = 1 '\001'
6: x.a[0] = 10 '\n'
按照小端来算:(看地址内的内容
应该是0x10a |
|