#include <stdio.h> union A{ int i; char c[2]; }; int main(){ A a; a.i; a.c[0] =1; a.c[1] =2; printf

#include <stdio.h>

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

int main(){
A a;
a.i;
a.c[0] =1;
a.c[1] =2;

printf("%d", a.i);
getchar();
return 0;
}
结果是什么?最主要想问的是为什么是这样,要详细点,谢谢能帮我解惑!

#include <stdio.h>

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

int main(){
A a;
a.i=0;
a.c[0] =1;
a.c[1] =2;

printf("%d%d\n", a.c[0],a.c[1]);
printf("%d %x\n",a.i, a.i);
//getchar();
return 0;
}
输出为:
12
513 201
a.c[0]为i的低八位,a.c[1]是高八位;反之同理
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-10-20
513
这个就是联合体的特性,i和c数组共用一段内存,修改c[0]为1,c[1]为2
i的值就是0x0201(十六进制)%d输出为十进制,为513

...#include <stdio.h> union data {int i; char c; }; struct {char...
如果int占2个字节,char a[2]占2个字节, i占2个,d占2个,所以选B 如果int占4个字节,那么因为字节对齐的缘故char a[2]占4个字节, i占4个,d占4个,就共占12个字节

#include<stdio.h> union ss { short int i; char c[2]; }; void ma...
对于计算机而言,打印输出的结果为266 内存中数据为0x0A,0x01,按16位整型解析即为0x010A即266.这题目考核的是联合体的基本概念,以及计算机的端模式(x86架构为小端模式)。对于大端模式的硬件架构,则结果将会截然不同。

#include<stdio.h>union{ int i;char x[2]; }a;void main(){ a.x[0...
#include<stdio.h> union{ int i;char x[2]; }a;void main(){ a.x[0]=10;a.x[1]=1;printf("%d",a.i);存储的时候是“低位在前”,a[0]是00001010,a[1]是00000001 输出的i是将二个字节作为一个整数看,即是x[1]x[0]也就是00000001 00001010 即 256+8+2=266。

C语言:例子解释,关于union
union是联合的意思,也就是内部的变量是共用同一个存储空间的,以变量中存储空间最大的为整个union的占用空间。这个union中i是int型的占用4个字节,char x[2]是两个字节,那么这个union就占用4个字节。假设分别是byte3,byte2,byte1,byte0。如果用a.x[0]操作的就是byte0(对应16进制数是0xa)...

#include <stdio.h> int main() { int a,b,i;
a=0; i=1;

main() { union bt { int k; char c[2]; }a; a.k=-7; printf("%o,%o\\...
Union是共用空间的。和Struct不同。共有4个字节,第一个字节 k [0..7]位 和 c[0] 共用 第二个字节 k [8..15]位 和 c[1] 共用。第三个字节 k [16..23]位。第四个字节 k [24..31]位。-7内部机器补码为 FF FF FF F9 先低后高存放。VC编译器会在printf的时候自动转为int型...

#include<Stdio.h> void main(){ int i; scanf("%d",&i); char a[i...
定义静态数组不能用一个变量来定义 ,数组的长度必须是一个确定 的值,你这样的想法只能动态创建一个数组

#include <stdio.h> #include <conio.h> int main(){ char a[100],c...
c未附初值 而while(c!='#'&&i<=100)使用到!c指向的内存 值 不定 出错

关于c语言中联合体\/共用体中数据存放的问题?
include <stdio.h> union { int i;char x[2];}a;void main(){ a.x[0] = 10;a.x[1] = 1;printf("%d",a.i);} 答案:266 解释如下:union { int i;char x[2];}a;在联合体a中定义了两种数据类型,字符数组x以及整形变量i.其中整形变量是16位的,数组大小为2的字符数组为8X2...

#include<stdio.h> int a[],i; void main() { a[1]=1; a[2]=1; for...
关键在这里 if(i==j)l=l+a[i][j];else if(i+j==2)k=k+a[i][j];当i=j=1的时候, if(i==j)判断为真,所以就不再判断 else if(i+j==2)这个条件了,因此不会运行 k=k+a[i][j];这一句程序,你可以这样改一下,将else去掉,这样就能避免这种情况出现。

相似回答