㈠ c语言共同体求解
#include <stdio.h>
int main(int argc, char *argv[])
{
union cif_ty //联合体定义 楼上讲的很清楚了 和结构体的区别在于几个变量公罩岩用内存一个位
//置,换句话说,同一个时间,只有一个变量是有效的,当使用另一个变量后,由于在内存是同
//一个位置,那么之前的变量值被现在的覆盖,无法再使用了,即使使用,也不再是你想要的值
//书上应该讲的更细 ,理解了这些,你的问题弊孝就好处理了。不过话说回来你要好好看书的吧。。
{
char c;
int i;
float f;
}cif; // 内存分配以所占字节最大的类型为主 即联合体占4byte
cif.c='a'; //cif.c =‘a’ ;
printf("c=%c\n",cif.c); //输出 a
cif.f=101.1; //使用了f = 101.1 c变量值存储空间被f占据了 c的值是没用的
printf("c=%c,f=%f\n",cif.c,cif.f); //所以f正常输出 为101.1
cif.i=0x2341; // i 值为 0x2341 f和c 均没有用了
printf("c=%c,i=%d,f=%f",cif.c,cif.i,cif.f); // f 值不可靠,而i的值为 0x2341 下面解释c的值
return 0;
}
i = 0x2341 ;内存存放为0x00002341 (32位cpu为主,64位cpu的话int占64bit )
char 占 8字节,计算机再取 c 变量时候,也是存取这块内存区域,所以取8位字节存储到c变量,而且是取低位,高位舍弃,所以c就为 0x41 ,以字符形式输出就是 A
float 和char 型同理,理解原理就好了。理解了char 就理解了float ,只不过,f=0.000000
,是因为float在内存的存放形式比较复杂,如果你有兴趣,可以去研究浮点型运算类的书籍,或者一下 IEEE754 ,是二进制浮点数算术常用的标准,涉及内容比较多,这里就不写了。。
怪累的,不过还是希望楼主采纳+赞同,好人一生物卜御平安。
同时望楼主看书仔细点,或许你错过的一个细节,就是很重要很重要的知识点,导致你走更多的弯路。不过代码这东西还是要多写,多练,多看。多看包括多看代码,提高代码分析力,也包括多看相关专业书。
㈡ c语言中的共用体是什么
所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:
union 共用体名
{成员表列};
union data
{
int a ;
float b;
doublec;
chard;
}obj;
该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。
union data /*共用体*/
{
int a;
float b;
double c;
char d;
}mm;
struct stud /*结构体* /
{
int a;
float b;
double c;
char d;
};
main( )
{
struct stud student;
printf("%d,%d",sizeof(struct stud),sizeof(union data));
}
运行程序输出:
15,8
程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。
对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。
可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为:
union data /*共用体*/
{
int a;
float b;
double c;
char d;
}mm;
其成员引用为:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。
main( )
{
union data
{
int a;
float b;
double c;
char d;
}mm;
mm.a=6;
printf("%d\n",mm.a);
mm.c=67.2;
printf("%5.1lf\n", mm.c);
mm.d='W';
mm.b=34.2;
printf("%5.1f,%c\n",mm.b,mm.d);
}
运行程序输出为:
6
6 7.2
3 4.2,=
程序最后一行的输出是我们无法预料的。其原因是连续做mm.d='W';mm.b=34.2;两个连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定。
例子虽然很简单,但却说明了共用体变量的正确用法。
㈢ c语言中简述数组结构体和共同体异同
相同点:都是C语言里内置支持的一种数据结构形式
不同点:
数组所有的元素类型形同,结构体可由不同的类型元素组合而成,元素与元素各自正姿有各自的举物绝空间,而共同体各元素的空间是相同的,整体的空间大小由占最大空间的元素决蚂颂定。
㈣ C++结构体和共同体的区别
结构体是由不同数据类型组成的一个结构,存储空间是所有成员需要的空间的总虚山和,结构成员是同时存在的。而共兄知同体则是不同数据类型共享一个羡誉消存储空间,空间的大小是能容纳共同体成员中的最大者。共同体成员的值不可能同时存在。
㈤ C语言结构体与共同体方面问题
union的内存大小有最大的变量决定,这里是4个字节,变量共用内存,所以这里k占4字节,数组c占两个字节,在内存位置上处于k变量4字节的低2个字节中,所以这里输出的唯尺也就是k的低2个字节的第1个字节和毁山镇第2个字节的数据,16进制看看吧,k=0xFFFFFFF9,c[0]=0xF9,c[1]=0xFF,希望你懂了...纤粗
㈥ c语言中的共用体是什么
一、共同体的简介:
在进行某些算法的C语言编程时,需要使几种不同类型的变量存放到同一段内存单元中,使几个变量互相覆盖,这种几个不同信陪指的变量共同占用一段内存的结构,在C语言中,被称作共同体类型结构,简称共同体;
二、共同体类型数据的特点:
1.同一个内存段可以用来存放几种不同类型的成员,但在每一瞬间只能存放其中的一种,而不是同时存放几种;
2.共同体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用;
3.共同体变量的地址和它的各成员的地址都是同一地址;
4.不能对共同体变量名乱茄赋值,也不能企图引用变量名来得到一个值;
5.共同体类型可以出现滑配在结构体类型的定义中,也可以定义共同体数组。
㈦ C里的共同体和结构体的区别
结构体(structure)与共同体(union)主要有以下区别:
1.结构体(structure)与共同体(union)都是迟世含由多个不同的数据类型成员组成, 但在任何同一时刻, 共同体(union)中只存放了一个被选中的成员, 而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体(structure)变量的总长度等于所有成员长度之和。在共同体(union)中,所有成员不能同时占用它的内存空间,它返慎们不能同时存在。共同体(union)变量的长度等于最长的成员的长度
2. 对码笑于共同体(union)的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体(structure)的不同成员赋值是互不影响的
㈧ C语言里面,结构体与共同体分别是啥意思具体指的是什么
一种构造数据类型,具体指:int、char、float。
㈨ C语言的结构体和共同体的区别是什么
结构体(structure)是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型,而且每个成员的数据类型可以相同也可以不相同。共同体(union)将几种不同的变量储存在同一内存单元中,也就是使用覆盖技术,几个变量互相覆盖,这种几个不同的变量共同占用一段内存的结构,可见二者最大的区别就是所占用的内存,结构体(structure)所占用的内存是分量内存之和,共同体(union)所占用的内存是等于最大的分量的内存。
具体来说,结构体(structure)与共同体(union)主要有以下区别:
1.结构体(structure)与共同体(union)都是由多个不同的数据类型成员组成,
但在任何同一时刻,
共同体(union)中只存放了一个被选中的成员,
而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体(structure)变量的总长度等于所有成员长度之和。在共同体(union)中,所有成员不能同时占用它的内存空间,它们不能同时存在。共同体(union)变量的长度等于最长的成员的长度。
2.
对于共同体(union)的不同成员赋值,
将会对其它成员重写,
原来成员的值就不存在了,
而对于结构体(structure)的不同成员赋值是互不影响的。
㈩ C语言中共同体和联合体有什么区别
同一东东的不同翻译
有些书翻译成联合体,有些叫共同体或共用体