当前位置:首页 » 编程语言 » c语言中的共用体
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中的共用体

发布时间: 2022-01-17 00:03:08

c语言中的共用体问题

答案是 39 9 (我的电脑上运行的结果)
由共用体的定义,可以知道 s 占8个字节(该共用体中最长的是 int a[2])
前4个字节存放的是 0x39,后4个字节存放的是 0x38

输出长整型时,因为 long 占4个字节,所以输出 39

char型占一个字节,所以 s.c[0] 中存放的是前4个字节中的第一个,
存放的应该是 0x39,对应的 %d 是57,这个刚好是字符 '9' 的ASCII码,故输出为9。

这个要知道数在内存是如何存放的。

❷ C语言中共用体怎么用

共用体在同一时间只能使用其中一个成员的它的存储类型是覆盖存储的当做中间变量比较合适。省存储空间

❸ C语言共用体是什么

共同体指的是
long w;
float x;
int y;
char z;
这几个变量用同一块内存,内存大小取这几个变量中的最大值
字节 long int float char double

16位机 4 2 4 1 8

32位机 4 4 4 1 8

64位机 8 4 4 1 8
如果是32位机上面一个共同体变量占4个字节,如果是64位机,占8个字节
所以答案应该是3.1416

❹ c语言中什么是共用体

共用体是一种特殊的结构变量,他的成员共用同一个内存空间,比如括号所在的内容应该这样输入:
union abc
{
char[10] wu;
long xuehao;
};
因为wu和xuehao 是占用同一段内存空间的,确切的说是他们的存放空间首地址相同,所以他们是无法单独存在的,拥有这个共用体的结构只能拥有wu 或xuehao ,如果对wu赋值,再对xuehao赋值,xuehao覆盖了wu,wu变为没有意义的了,反之一样,所以不可能同时出现

❺ 请解释C语言中共用体的定义和使用方法

所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单
元。其定义形式为:
union 共用体名
{成员表列};
7.5.1 共用体的定义
union data
{
int a ;
float b ;
d o u b l e c ;
c h a r d ;
} obj;
该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量o b j。共用体
数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。
-================
给你一个参考网址:http://www.gotohelp.cn/Html/C/2006-1/4/01042858.html
或http://www.bc-cn.net/Article/kfyy/cyy/jc/200511/936.html

❻ C语言共用体。。。

不是说只能用一次,而是共用体的成员某一时间段内只有一个是有效的(只能使用其中一个),其他的是无意义的。
共用体的多个成员公用同一段地址空间,所以在一段时间内只有一个有意义。例如
union {
char a;
int b;
float c;
} u;

void f1(void) { //错误用法
u.a = 'a';
u.b = 1; //执行之后u.a的值已经被改变了
printf("%c, %d\n", u.a, u.b); // 执行时a的值已经被改变了,是没有意义的
}

void f2(void) { //正确用法
u.a = 'a';
printf("%c\n", u.a);
u.b = 1;
printf("%d\n", u.b);
}

void main() {
f1();
f2();
}

❼ 关于c语言的共用体

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。
共用体类型数据的特点
1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
3.共用体变量的地址和它的各成员的地址都是同一地址。
4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。

❽ c语言中的共用体

共用体里的所有变量是共地址的.即所有变量的地址是相同的.s.a[0]=0x39;如果是16位系统的话,在内存中的表示形式是3900s.a[1]=0x38,在内存中的表示形式是3800所以在内存中的形式是39003800 (3900是低位字节,3800是高位字节,其中3900中的39又是低位,00是高位,3800中的38是低位,00是高位.)由于在内存中是以低位先存的方式.所以实际地址是:00380038共用体内的变量地址相同,所以输出s.b的地址就是00380039,即380039.%lx是以地址方式输出,即输出变量的地址.s.c[0]是字符型,只有一个字节,地址截断,截取最低的地址,即就是39这里的39是16进制,表示的ASCII是57,即字符'9',所以输出s.c[0]就是字符'9'了.

❾ 在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语言中,共用体一般有什么作用

共用体一般指联合体,作用如下:

1、节省内存

有两个很长的数据结构,不会同时使用,用结构体的话,只占用最长的那个数据结构所占用的空间,就足够了。

2、做某些转换用

union{char a[8];double x;};

x=20.8;

cout<<hex<<a[0]<<“ ”<<a[1]<<…<<endl;

(10)c语言中的共用体扩展阅读:

结构体和共用体

结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。

共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

共用体也是一种自定义类型,可以通过它来创建变量,