C语言里面,结构体与共同体分别是啥意思?具体指的是什么?
我怕我解释得不够清楚,我还是在网上找个清楚点的给你吧。
联合体(union)和结构体(struct)的区别
1. 联合说明和联合变量定义
联合也是一种新的数据类型, 它是一种特殊形式的变量。
联合说明和联合变量定义与结构十分相似。其形式为:
union 联合名{
数据类型 成员名;
数据类型 成员名;
...
} 联合变量名;
联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型 和不同长度的变量。
下例表示说明一个联合a_bc:
union a_bc{
int i;
char mm;
};
再用已说明的联合可定义联合变量。
例如用上面说明的联合定义一个名为lgc的联合变量, 可写成:
union a_bc lgc;
在联合变量lgc中, 整型量i和字符mm公用同一内存位置。
当一个联合被说明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度。
联合访问其成员的方法与结构相同。同样联合变量也可以定义成数组或指针,但定义为指针时, 也要用"->;"符号, 此时联合访问成员可表示成:
联合名->成员名
另外, 联合既可以出现在结构内, 它的成员也可以是结构。
例如:
struct{
int age;
char *addr;
union{
int i;
char *ch;
}x;
}y[10];
若要访问结构变量y[1]中联合x的成员i, 可以写成:
y[1].x.i;
若要访问结构变量y[2]中联合x的字符串指针ch的第一个字符可写成:
*y[2].x.ch;
若写成"y[2].x.*ch;"是错误的。
2. 结构和联合的区别
结构和联合有下列区别:
1) 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合转只存放了一个被选中的成员, 而结构的所有成员都存在。
2) 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。
下面举一个例了来加对深联合的理解。
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c
", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x
", number.i);
getch();
}
输出结果为:
AB
6261
从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值;当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八位。
结构体(structure)是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型,而且每个成员的数据类型可以相同也可以不相同。共同体(union)将几种不同的变量储存在同一内存单元中,也就是使用覆盖技术,几个变量互相覆盖,这种几个不同的变量共同占用一段内存的结构,可见二者最大的区别就是所占用的内存,结构体(structure)所占用的内存是分量内存之和,共同体(union)所占用的内存是等于最大的分量的内存。
具体来说,结构体(structure)与共同体(union)主要有以下区别:
1.结构体(structure)与共同体(union)都是由多个不同的数据类型成员组成,
但在任何同一时刻,
共同体(union)中只存放了一个被选中的成员,
而结构体(structure)的所有成员都存在。在结构体(structure)中,各成员都占有自己的内存空间,它们是同时存在的。一个结构体(structure)变量的总长度等于所有成员长度之和。在共同体(union)中,所有成员不能同时占用它的内存空间,它们不能同时存在。共同体(union)变量的长度等于最长的成员的长度。
2.
对于共同体(union)的不同成员赋值,
将会对其它成员重写,
原来成员的值就不存在了,
而对于结构体(structure)的不同成员赋值是互不影响的。
一种构造数据类型,具体指:int、char、float。
c语言中的共用体是什么
2.共同体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用;3.共同体变量的地址和它的各成员的地址都是同一地址;4.不能对共同体变量名赋值,也不能企图引用变量名来得到一个值;5.共同体类型可以出现在结构体类型的定义中,也可以定义共同体数组。
关于c语言共用体的问题
而long型的占四个字节,也是一样的,分成四个字节分开放,高字节放低地址内存单元。你的程序中,只占一个字节的0x39给了int型的i[0],那这样,高字节为0,假设放在最低地址的内存单元中,那0x39就顺着往上放,i[1]也一样。好了,这样放完后,这个占四个字节的共用体变量的存储情况就是:0x...
漫谈——typedef关键字、结构体、枚举及共同体
这使得共同体在内存使用上更加紧凑,但在数据访问时需注意数据覆盖的风险。共同体常用于实现内存复用,例如在处理不同数据类型的数据时,可以使用共同体实现数据的动态切换。总结来说,typedef、枚举型和共同体是编程中常用的类型定义和数据结构概念。通过合理使用这些概念,可以提高代码的可读性、可维护性和...
c语言共用体赋值问题
有没有分无所谓,本人很乐意回答你的疑惑。共同体,顾名思义,里面的成员共享一块内存空间。你这里面x没有写出来,估计是定义成一个整数。在32位系统下,整数占用32位内存,也就是4个字节。由于结构体里面只有两个char,所以占用两个字节的内存。共享了整数的前两个字节的内存空间。整个结构体所占用...
请给我简单介绍一下计算机二级C语言是什么
结构体(即“结构”)与共同体(即“联合”)部分,大纲介绍了用typedef说明一个新类型,结构体和共用体类型数据的定义和成员的引用,以及通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入。位运算部分,大纲介绍了位运算符的含义和使用,以及简单的位运算。文件操作方面,大纲要求考生掌握...
TC中,实型数据在内存中占多少个字节
char 1个 int 2个(分系统,有的系统4个)double 4个 指针(无论指向什么) 同整型 结构体 : 每一个类型的累加和 共同体 : 最大那个类型所占的字节数
计算机二级c语言考什么 计算机二级c语言考什么类型的题目
5、循环结构程序设计,理解各类循环、语句以及循环的嵌套。6、会一维数组和二维数组的定义、初始化和数组元素的引用。7、库函数的正确调用,函数的定义方法、正确调用。8、文件操作,如文件的打开、关闭、读写、定位。9、地址与指针变量的概念,地址运算符与间址运算符。10、结构体与共同体。11、位运算...
char数据类型与数值类型之间的转换;什么是数据类型?什么是数值类型?
包括所占内存空间的大小,取值范围及其可进行的操作等。数值类型指的是表示数量、可以进行数值运算的数据类型。在C语言中的数据类型可以分为基本数据类型和构造数据类型,指针类型和空类型。其中基本数据类型包括整型、浮点型、字符型、枚举型;构造类型包括数组、结构体、共同体类型。
C++结构中的共同体
结构体是由不同数据类型组成的一个结构,存储空间是所有成员需要的空间的总和,结构成员是同时存在的。而共同体则是不同数据类型共享一个存储空间,空间的大小是能容纳共同体成员中的最大者。共同体成员的值不可能同时存在。
C语言,关于共同体和结构体,程序我能看懂,但是结果为什么是这样啊?
共同体变量u大小为四个字节 00000000 00000000 00000000 00000000 u.s.a=9;u.s.b=10;\/*这时成员s用效,s中的a和b分别占2个字节*\/ 所以:00000000 00001010 00000000 00001001 u.c=u.s.a*u.s.b;\/*这时成员c有效,c只占一个字节,最低位的一个字节*\/ 所以:00000000 00001010 00000000 ...