⑴ c语言中共同体的大小是其成员的大小的和对吗
不是,共用体只分配一个内存空间,然后各成员数据存在这一个空间中,相互覆盖。
⑵ C语言共同体struct 中 怎么计算整个共同体的大小 即用sizeof时 跟union一样 是结构体里最大的元素大小么
struct是结构体
union是共用体
struct的大小应该用sizeof计算
struct实际占用的内存大小大于或等于其中所有元素大小之和,因为有一个内存对齐问题
内存对齐问题比较复杂,可以网络之
⑶ 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语言共同体问题
准备参加全国计算机比赛是吧?!
我也是,这题我是这样看的:公用体的每一个成员变量都是公用地址的,但是int型占16位(2字节),而char型占8位,266换为2进制是 “1 0000 1010”,可以得出,char型的ch只取后8位,即“0000 1010”,换回10进制输出则是“10”。
最后说一下一楼的问题,int在Turbo C 2.0和Turbo C++3.0为2字节,而VC++6.0是4字节(C语言程序 第三版),其实用2字节的比较多,但事实上4字节和2字节在本体中没有什么区别。
我们一起努力吧,祝你好运!
⑸ C语言有关共用体的使用方法,请前辈们请教谢谢啦!
共用体又称联合体,关键字union,正如其名字,其成员变量共同占用同一段内存,这段内存的大小就是所有成员中最大的那个,所以整个共用体变量大小就是其最大成员大小,比如你代码中的A大小就是成员c的大小8个字节。
至于用处还是有很多的:
比如我们表示一个学生分数,有幼儿,小学,初中,这三种学生信息结构基本相同,但只有分数标准不一样,幼儿分数(差、中、优),小学(C、B、A),初中(0~100分)。那么我们就可以把学生信息定义成结构体,而结构成员分数那一块定义成共用体(包含字符串类型,字符类型、数值类型)。这样结构本身就不需要定义三种类型成员了。
又比如,数据传递时,用共用体表示数据,之后只要按照你的需求按不同格式获取数据。