- 论坛徽章:
- 1
|
菜鸟关于union类型的疑惑,请高手指点
- #include <stdio.h>;
- int main()
- {
- char *p;
- union{ /*定义一个联合*/
- int i;
- struct{ /*在联合中定义一个结构*/
- char first;
- char second;
- }half;
- }number;
- number.i=0x4241; /*联合成员赋值*/
-
- p = (char *)&number.i;
- printf("add0 = %p value = %x\n", p, *p++);
- printf("add1 = %p value = %x\n", p, *p++);
- printf("add2 = %p value = %x\n", p, *p++);
- printf("add3 = %p value = %x\n\n", p, *p++);
-
- printf("add(first) = %p value = %x\n", &number.half.first, number.half.first);
- printf("add(second) = %p value = %x\n\n", &number.half.second, number.half.second);
- printf("%d%d\n\n", number.half.first, number.half.second);
-
- number.half.first='a'; /*联合中结构成员赋值*/
- number.half.second='b';
-
- p = (char *)&number.i;
- printf("add0 = %p value = %x\n", p, *p++);
- printf("add1 = %p value = %x\n", p, *p++);
- printf("add2 = %p value = %x\n", p, *p++);
- printf("add3 = %p value = %x\n\n", p, *p++);
-
- printf("add(first) = %p value = %x\n", &number.half.first, number.half.first);
- printf("add(second) = %p value = %x\n\n", &number.half.second, number.half.second);
-
- p = (char *)&number.i;
- printf("add0 = %p value = %x\n", p, *p++);
- printf("add1 = %p value = %x\n", p, *p++);
- printf("add2 = %p value = %x\n", p, *p++);
- printf("add3 = %p value = %x\n\n", p, *p++);
-
- printf("%x\n", number.i);
- //getchar();
- return 0;
- }
复制代码
我的编译环境为aix 5L,gcc 3.3,结果如下:
- add0 = 2ff2296d value = 0
- add1 = 2ff2296e value = 0
- add2 = 2ff2296f value = 42
- add3 = 2ff22970 value = 41
- add(first) = 2ff2296c value = 0
- add(second) = 2ff2296d value = 0
- 00
- add0 = 2ff2296d value = 61
- add1 = 2ff2296e value = 62
- add2 = 2ff2296f value = 42
- add3 = 2ff22970 value = 41
- add(first) = 2ff2296c value = 61
- add(second) = 2ff2296d value = 62
- add0 = 2ff2296d value = 61
- add1 = 2ff2296e value = 62
- add2 = 2ff2296f value = 42
- add3 = 2ff22970 value = 41
- 61624241
复制代码
特别是地址为2ff2296d的,大家注意它的值。
我也弄不清楚了,大家分析分析吧。 |
|