
C++中为何不能对共用体变量名赋值?
c++的共用体一章有如下规定:①不能对共用体变量名赋值②不能企图引用变量名来得到一个值③不能在定义共用体变量时对它初始化④不能用共用体变量名作为函数参数。小弟不太明白这些...
c++的共用体一章有如下规定:①不能对共用体变量名赋值②不能企图引用变量名来得到一个值③不能在定义共用体变量时对它初始化④不能用共用体变量名作为函数参数。小弟不太明白这些规定的深层次原因,哪位前辈可以帮忙解释一下?尤其是第一条和第四条,为何不能对共用体变量名赋值呢?是出于什么样的考量而有此规定的?诚望各位前辈赐教。
结构体不是可以赋值吗?而且结构体类型可以作为函数参数,为何这个不可以呢?是什么原因导致共用体不能赋值和作为函数参数?还望赐教。 展开
结构体不是可以赋值吗?而且结构体类型可以作为函数参数,为何这个不可以呢?是什么原因导致共用体不能赋值和作为函数参数?还望赐教。 展开
3个回答
展开全部
又有一位谭浩强学生了。。。
共用体非常重要的一点就是多种类型的覆盖性,上面的原则也大略都从此而来。在进行上面所列的四种操作时,都会产生类型上的不确定性。
但是,实际上并非如此。
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;
}
当然了,有一些事情虽然是可行的,但并不建议去做。
好了,先这样吧,多实践一下吧。
共用体非常重要的一点就是多种类型的覆盖性,上面的原则也大略都从此而来。在进行上面所列的四种操作时,都会产生类型上的不确定性。
但是,实际上并非如此。
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;
}
当然了,有一些事情虽然是可行的,但并不建议去做。
好了,先这样吧,多实践一下吧。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询