一个C语言共用体题型....

作者&投稿:敏终 (若有异议请与网页底部的电邮联系)
C语言共用体的一道题~

首先,i 为4个字节,ch[2]占 2个字节,i 的前2字节即ch[2]的2个字节,程序ch[0]=13,ch[1]=0,那么i 的后2字节未初始化,所以是随机的,输出来当然就不是13了,如果要输出13,即ch数组定义为ch[4],然后ch[2] = ch[3] = 0,不过也不一定输出就是13,与CPU的大小端模式有关
其次,如果你的代码写成a.i = 13,则a.ch[0]也不一定是13,这同样与CPU的大小端模式有关,详细可查看网络

这与电脑处理字节的顺序有关,上面的结果说明你电脑处理字节的方式是Little Endian,将字节以倒序的方式储存起来。
另一种则是Big Endian,与Little Endian正好相反。
x86都是用的Little Endian。

如果你没有打错的话,你的教材印错了
printf("%x\n", s->C[0]);
上面的下标不是10,应该是0
这样的话答案才是39

其实这道题偏难,解释一下:
结构体根据最长的成员分配空间,所有成员共享空间,就是说他们在内存中的地址相同。
所以题中的结构体在内存中的长度是8(就是第一个成员int数组的长度,因为它最长),long型的k占4个字节,char数组占4个字节。
然后有必要解释一下x86指令体系下的内存特性,数组在内存中存放时,按字节为单位,低字节的在低地址,高字节在高地址。举个例子:比如对于int i=4;实际占用4个字节(vc中),就是0x00000004,最低位的字节为0x04,在内存中存放顺序(内存地址由低到高)为0x04 0x00 0x00 0x00。
题中给数组i的两个元素分别赋值为0x39和0x38,他们在内存中的分布是这样的(内存地址由低到高):0x39 0x00 0x00 0x00 0x38 0x00 0x00 0x00,所以char数组C的4个元素分别为0x39,0x00,0x00,0x00。16进制方式打印C[0]就是39。


c语言问题 公用体
在你上面那个例子中 联合体的char类型 他实际在内存中的字节数是4个字节 整个联合体的内存是12个字节 因为联合体他的内存存储是跟相邻基础数据类型一致的 所占内容小的要扩张 因为4个字节的类型不可能缩小 所以内存直接为char分4个字节的内存 ...

C语言 共用体问题 有加分
(1)可以对联合体静态变量的第一个成员进行初始化,但不能对第二个及后面的成员初始化,因为它们都合用同个地址空间,只能有一个被初始化。(2)当d1赋予99后,内存是63 00 00 00 ,而 float 的格式是低9位是符号及指数部分,后23位是底数,这里底数是0,因此,d2的值是0.0;(3)用...

c语言 结构体和共用体 1. 有5个学生,每个学生的数据包括学号、姓名、3...
include<stdio.h> define max 5 \/*设定要输入成绩的学生个数*\/ double zpj; \/*总平均值*\/ struct student \/*结构体*\/ { int num;char name[10];int score1;int score2;int score3;double pj;};struct student stu[max],temp;void Input() \/*输入函数*\/ { int i;for(i...

C语言的一个共用体的问题
这个实际上牵扯到数据在内存里的放置了 首先这个共用体一般来说是4个字节的,在little-endian的机器上结构,地址在从左到右递增大概是这样,当然每行是一个观测模式,实际上不会并存的 i[0]第一低位字节 i[0]第二低位字节 i[1]第一低位字节 i[2]第二低位字节 k第一低位字节 k第二低位字节...

C语言共用体问题
而long型的占四个字节,也是一样的,分成四个字节分开放,高字节放低地址内存单元。你的程序中,只占一个字节的0x39给了int型的i[0],那这样,高字节为0,假设放在最低地址的内存单元中,那0x39就顺着往上放,i[1]也一样。好了,这样放完后,这个占四个字节的共用体变量的存储情况就是:0x...

在c语言中,共用体一般有什么作用?
共用体一般指联合体,作用如下:1、节省内存 有两个很长的数据结构,不会同时使用,用结构体的话,只占用最长的那个数据结构所占用的空间,就足够了。2、做某些转换用 union{char a[8];double x;};x=20.8;cout<<hex<<a[0]<<“ ”<<a[1]<<…<<endl;...

C语言中共用体题目的理解!求助理解过程?
=24897 如果以整型来读取这块区域,这个数据就是24897再以8进制来表示24897这个数的话这个数就是(60501)(%o就是以8进制输出数据)如果以字符型来读取这块区域,这个数据就分别是65和97再以8进制来表示这两个数的话就是(101)和(141)而这两个数对应的ASCII码就是A和a(%c就是以字符输出数据);

C语言关于共用体类型的问题
对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。很显然,在上面这种情况下,除了最后7位全部是0,E也全为0。这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的...

c语言中的共用体是什么?
共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。\\x0d\\x0a\\x0d\\x0aunion data \/*共用体*\/\\x0d\\x0a{\\x0d\\x0aint a;\\x0d\\x0afloat b;\\x0d\\x0adouble c;\\x0d\\x0achar d;\\x0d\\x0a}mm;\\x0d\\x0astruct stud \/*...

【c语言共用体】里面嵌套有结构体,求详解。高分悬赏。谢谢
共用体就是享用同一块内存 在此例中 e的大小为最长元素的大小,也就是结构体out的大小,共两个int,假设此处int为4字节 e.c和e.d和e.out.a占用同一块内存,即低4字节的内存,a.out.b占用高4字节内存 然后e.c=1;e.d=2;e.c和e.d和e.out.a都为2 e.out.a=e.c*e.d = 2*2 =...

番禺区15519649618: C语言共用体的一道题 -
魏昏黄柏: 首先,i 为4个字节,ch[2]占 2个字节,i 的前2字节即ch[2]的2个字节,程序ch[0]=13,ch[1]=0,那么i 的后2字节未初始化,所以是随机的,输出来当然就不是13了,如果要输出13,即ch数组定义为ch[4],然后ch[2] = ch[3] = 0,不过也不一定输出就是13,与CPU的大小端模式有关 其次,如果你的代码写成a.i = 13,则a.ch[0]也不一定是13,这同样与CPU的大小端模式有关,详细可查看网络

番禺区15519649618: 【C语言共用体题目】啊啊啊啊啊啊啊~完全没有思路啊~~~求点拨!! -
魏昏黄柏: 共用体的意思是内部的变量都共享同一块储存的地方,也就是其中一个的值改变就会影响其他的值.你的题目共用体内i, k, c都是指向相同的地方的s指针指向r,r是这个共用体.short在内存中占两个字节,char占一个字节,long占4个字节,这样子...

番禺区15519649618: C语言共同体问题 -
魏昏黄柏: 结果应该是输出一个随机数!有这样几个概念关于共用体,也就是你说的共同体:1、共用体是几种不同的变量存放在同一内存当中,即在内存中占同一位置2、同一内存段可以用来存放几种不同类型的成员,但是在每一瞬只能放其中的一种,而...

番禺区15519649618: c语言共用体输出问题 -
魏昏黄柏: 这个是共用体的问题 由于共用体共用同一段起始内存的地址,所以后一次的数据写入可能会覆盖前一次的数据 然后lz这道题,如果系统将int做2直接处理(比如TC2)的话,结果是380039和9;如果是按4字节处理的话,结果应该是39和9 下面针对lz的结果,讲一下2字节处理的情况 第一个共用体成员是int的数组,两个元素,共4字节 第二个成员是long,4字节 第三个成员是char数组,4个元素,4字节 所以这个union变量共4字节 s.a[0]=0x39; s.a[1]=0x38; 导致变量s的内存存储的16进制数据(小尾存储的话)高位到低位依次为为00 38 00 39 所以才会导致输出380039和94字节处理的话,同理

番禺区15519649618: c语言共用体问题 -
魏昏黄柏: 联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量.union dt {int a;char b;double c;}data; int 占用4个字节,double占用8个字节,data.a=57只初始化了int型,double型未初始化,内存情况是未知的,所以...

番禺区15519649618: 【C语言共用体题目】咋得出结果滴捏..求指点~~ -
魏昏黄柏: 结果 是16 共用体的话...占用的空间是最大的那一个...long x[2]; 占8字节 int y[4]; 占16字节 char z[8];占8字节 所以结果是8......共用体的意思就是不同的变量占用相同的空间...所以所用的空间就是变量中所需要的最大的那个空间..希望对你有帮助...仍有问题可以HI我. ...

番禺区15519649618: C语言共用体的一个覆盖问题 -
魏昏黄柏: 因为int c[2]一共占用了8个字节,而int k只占用4字节,修改了k的值为20后,只会使c的前四个字节受到影响,后四个字节依旧保持原样.所以c[0]变成了20,而c[1]还是6.》int c[2]改成char c[2]然后再给这两个数随意赋两个值其他不变,输出结果是多少呢?这个涉及大小端的问题,char c[2]只占用2字节,当k被改为20时,如果机器是小端系统,那么数组c占用的那两个字节就会被k的低字节覆盖,即c[0]变成20,c[1]变成0.如果机器是大端系统,那么数组c占用的那两个字节就会被k的高字节覆盖,即c[0]变成0,c[1]变成0.

番禺区15519649618: C语言一个关于共用体的赋值的问题 -
魏昏黄柏: e.a=1;e.b=2;e.in.x=e.a*e.b;//e.b+e.b=4;这时候共用体开始地址存储的值为e.b的值e.in.y=e.a+e.b;//这时候共用体开始地址存储的值为e.in.x的值, 这时候e.a,e.b值为4;这时候为8;

番禺区15519649618: C语言 - 结构体和共用体题型 -
魏昏黄柏: Zhao,m,290,Zhao,f,350 这种题,只要运行一下程序就可以了.

番禺区15519649618: C语言共用体问题!
魏昏黄柏: 共同体就是内存共享了;所以他所占内存空间为里面最大变量所占空间 所以KEY 所占空间就是4字节; 假设Key 所分配的内存地址为 0x00427c48 根据共享内存 &i = 0x00427c48 ch = 0x00427c48 ;当 i =65*256+66 =0X4142; 而整数在内存存储方式为低字节再前高字节在后 所有从0x00427c48 开始 4字节的内容一次为 42 41 00 00此时ch[0] = 42 ch[1] = 41 所以安字符输出CH 就是B A;

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网