问题描述
- C语言结共用体问题求教并求详细解释
-
union dt{int a;char b;double c;}data;以下叙述中错误的是
A)data的每个成员起始地址都相同
B)变量data所占内存字节数与成员c所占字节数相等
C)程序段:data.a=5;printf("%f",data.c);输出结果为5.000000
D)data可以作为函数的实参
====求教应该选哪个答案?并求详细解释
解决方案
C 因为所有浮点数类型在内存中的存储方式是不同的
解决方案二:
答案为D,这个问题主要考察的是对于联合体(或者如你称之为共用体也可以)的理解。联合体就是定义了不同类型的数据作为可选的结构。对于联合体而言,在其中的结构在使用的中只会有一个类型被真正的使用到。联合体的各不同成员的地址是相同的,但实际联合体所占的空间是按照最长的结构所占的内存空间分配,这也保证了如果在实际使用的过程中使用的是最长的结构时能够保证最长结构的数据完整与准确性。联合体不能作为参数传递,因为无法确定传入的参数的实际类型,在使用过程中更加无法确定应该使用联合体中的那个结构。
解决方案三:
共用体类型数据的特点
1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。
2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。
3.共用体变量的地址和它的各成员的地址都是同一地址。
4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。
5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
通过上面的描述,现在只能是int型
时间: 2024-10-26 09:49:00