C++中为何不能对共用体变量名赋值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中为何不能对共用体变量名赋值?相关的知识,希望对你有一定的参考价值。

c++的共用体一章有如下规定:①不能对共用体变量名赋值②不能企图引用变量名来得到一个值③不能在定义共用体变量时对它初始化④不能用共用体变量名作为函数参数。小弟不太明白这些规定的深层次原因,哪位前辈可以帮忙解释一下?尤其是第一条和第四条,为何不能对共用体变量名赋值呢?是出于什么样的考量而有此规定的?诚望各位前辈赐教。
结构体不是可以赋值吗?而且结构体类型可以作为函数参数,为何这个不可以呢?是什么原因导致共用体不能赋值和作为函数参数?还望赐教。

又有一位谭浩强学生了。。。
共用体非常重要的一点就是多种类型的覆盖性,上面的原则也大略都从此而来。在进行上面所列的四种操作时,都会产生类型上的不确定性。
但是,实际上并非如此。
1.共用体虽然集合了多种类型,但它自身却有固定的大小(大到足够放下最大的类型),赋值时,只需复制内存块即可。
2.当引用共用体变量时,当然得到了该种类型的一个值,比如在函数中传递参数时就是取了该变量的值。
3.定义共用体变量时完全可以进行初始化,但是只能对其第一个类型进行。
4.如同结构体一样,共用体同样可以作为参数传递。
可用如下代码进行验证与学习:
#include <stdio.h>

typedef union
int i;
double d;
MYDATA;

void MyFunc(MYDATA data)
printf("data.i=%d\n",data.i);


int main()

MYDATA data=100; //定义共用体变量时初始化(使用第一个类型)
MYDATA data2;

printf("sizeof(MYDATA)=%d\n",sizeof(MYDATA));
//共用体有确定的大小,引用时便可得到该类型的值

MyFunc(data); //可以作为参数传递

data2.i=291;
data=data2; //可以相互赋值

MyFunc(data);

return 0;


当然了,有一些事情虽然是可行的,但并不建议去做。
好了,先这样吧,多实践一下吧。
参考技术A 可以给变量赋值,但是不能给变量名赋值 参考技术B 共用体共用内存的,要通过其成员才直接存储的数据是什么类型的

共用体(union)

  在C语言中,当不同数据类型的数据共同占有使用一块内存空间时,这个数据构造类型叫做共用体,也叫联合体。共用体用的地方比较少,使用形式与结构体类似,但是内存使用方式不同。

1--- 定义

union 共用体类型名
{
成员表列;

}变量名1;
union 共用体类型名 变量名2;


2--- 成员共用同一个存储区域,共用体类型变量是以最后一次

以上是关于C++中为何不能对共用体变量名赋值?的主要内容,如果未能解决你的问题,请参考以下文章

c语言共用体包含一个数组成员,我要对这个数组成员进行赋值,一定要一个一个的赋值么?不能写在花括号

关于一个C语言共用体赋值问题

C语言之共用体类型

共用体(union)

C++:特殊工具与技术之union(联合-共用体)

C++:特殊工具与技术之union(联合-共用体)