C语言中共用体的输出问题
现有共用体的输出演示如下:#include"stdio.h"uniondata{intstud;charteach[10];};voidmain(){uniondatau...
现有共用体的输出演示如下:
#include"stdio.h"
union data
{
int stud;
char teach[10];
};
void main()
{
union data un1;
un1.stud=2;
un1.teach[0]=23;
un1.teach[1]=0;
un1.teach[2]=0;
printf("%d\n",un1.stud);
}
输出结果:23
#include"stdio.h"
union data
{
int stud;
char teach[10];
};
void main()
{
union data un1;
un1.stud=2;
un1.teach[0]=23;
un1.teach[1]=1;
un1.teach[2]=0;
printf("%d\n",un1.stud);
}
输出结果:279
为什么我每次改变语句中un1.teach[1]和un1.teach[2]的值,输出结果会变化呢,输出的结果不应该一直是23吗?求大神指教! 展开
#include"stdio.h"
union data
{
int stud;
char teach[10];
};
void main()
{
union data un1;
un1.stud=2;
un1.teach[0]=23;
un1.teach[1]=0;
un1.teach[2]=0;
printf("%d\n",un1.stud);
}
输出结果:23
#include"stdio.h"
union data
{
int stud;
char teach[10];
};
void main()
{
union data un1;
un1.stud=2;
un1.teach[0]=23;
un1.teach[1]=1;
un1.teach[2]=0;
printf("%d\n",un1.stud);
}
输出结果:279
为什么我每次改变语句中un1.teach[1]和un1.teach[2]的值,输出结果会变化呢,输出的结果不应该一直是23吗?求大神指教! 展开
展开全部
首先你要知道计算机的存储模式,分为大端存储和小端存储。所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
一般我们用的计算机是属于x86架构的,是小端存储的。
所以 teach[1]:teach[0] = 0000 0001 0001 0111 B = 117H = 279 D
一般我们用的计算机是属于x86架构的,是小端存储的。
所以 teach[1]:teach[0] = 0000 0001 0001 0111 B = 117H = 279 D
追问
特别感谢你的回答,int型号占4个字节,char则是占1个,所以un1.stud的值其实就是un1.teach、un1.teach[1]、un1.teach[2]、un1.teach[3]这四个字符所对应的二进制数排列再转化为十进制的结果,我试了一下,和后面的un1.teach[2]、un1.teach[5]......确实没关系了!谢谢你
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询