c语言-C语言结共用体问题求教并求详细解释

问题描述

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

c语言-C语言结共用体问题求教并求详细解释的相关文章

指针-C语言求教应该选哪个答案呢?并求详细解释

问题描述 C语言求教应该选哪个答案呢?并求详细解释 void *fun()此说明的含义是: A)fun函数无返回值 B)fun函数的返回值可以是任意的数据类型 C)fun函数的返回值是无值型的指针类型 D)指针fun指向一个函数,该函数无返回值 求教应该选哪个答案呢?并求详细解释 解决方案 答案选择:C 代码的意思是:定义一个函数指针. 比如:定义一个指向函数的指针,该函数有一个整形参数并返回一个整型值 int(*fun)(int): 再比如原来函数是void func(void): 那么定义的

c语言-C语言选择题求详细解释

问题描述 C语言选择题求详细解释 已知:int a[3][4],*p=a[0];p+=7; ,那么与*p的值相同的是 A*(a+7) B*(&a[0]+7) C*(a[0]+3)D*(&a[1][1]+7) ====参考答案是B,求大侠给出详细解释 解决方案 就是偏移七个位置 然后再取值 解决方案二: 和之前回答的问题一样还是 指针的地址理解. 关键在于理解 &a[0]=p 解决方案三: 哪里出的考题?B也是错的,应该是: *(&a[0][0]+7) 解决方案四: a其实是

c语言-C语言===参考答案为A,求详细解释

问题描述 C语言===参考答案为A,求详细解释 已知int i=0,j=1,*p=&i,*q=&j;错误的语句是: A)i=*&q; B)p=&*&i; C)j=*p++; D)i=*&j; ===参考答案为A,求详细解释 解决方案 q是j的地址 i等于赋予了j的地址 解决方案二: &是取地址*是寻址(解引用)所以 q 指针 所指内存中存的是j的地址 也就是*q=0x0003(j的地址) 指针*q又有自己的地址q==0x0001 理解了上述就可以明白

c语言-C语言程序运行结果为何是a=2??求大侠解释详细步骤

问题描述 C语言程序运行结果为何是a=2??求大侠解释详细步骤 #include main () { int a=1,b=3,c=0,d=7,e=9,f=2,g=4,h=6,i=8,j=0,k=10; a+=++b*c+--e/f-i%d?c--&++i?++b||--d:!j==1:k+++a; printf("a=%d",a); } /* 1.程序运行结果为: a=2 */ 解决方案 程序结果不确定.也就是说不同的编译器结果不同. 解决方案二: 参考:http://www.

c语言-C语言程序运行结果是?

问题描述 C语言程序运行结果是? main() { int i; char f="%12.8s ",*s="*******"; for(i=1;i<9;i++) { *(f+2)=2+i-1+'0'; *(f+4)=8-i+1+'0'; printf(f,s); } } ========求教该C语言程序运行结果是?及每句详细解释??另外 char *f="%12.8s "和printf(f,s);是什么意思? 解决方案 #include&l

c语言-C语言小白问题求大神指教

问题描述 C语言小白问题求大神指教 #include #include unsigned fun(int w) { int a; int i; i=1; a=w; while(a==0) { a=a/10; i++; } w=w%pow(10,i); return w; } unsigned main() { int w; printf("please enter a number:n"); scanf("%d",&w); printf("the

c语言-C语言若有以下定义和语句

问题描述 C语言若有以下定义和语句 int *p,k=10; double *q,f=5.6; p=&k;q=&f; 执行语句p=(int *)q;后,*p的值是()A)一个整数 B)5 C)6 D)10====参考答案是A,求详细解释 解决方案 q一开始是指向double类型的变量,然后强转为指向int类型的指针并赋值给p,虽然强转了,但是q依然指向存储double类型5.6的8个字节的内存区域的起始地址,然后p也指向这段内存,然后对p进行取值,因为p是int类型,所以*p就取得了这段内

c语言-C语言double t[3][3],(*pt)[3]=t则对t数组元素错误的引用是

问题描述 C语言double t[3][3],(*pt)[3]=t则对t数组元素错误的引用是 double t[3][3],(*pt)[3]=t则对t数组元素错误的引用是: A)*(pt+1)[2] B)*(pt[0]+1) C)t[0][2] D)(*(t))[2] ===参考答案为A,求详细解释 解决方案 A错误原因:*级别低于[],被解释为: ((pt+1)[2])相当于(*(pt+1+2))即pt[3][0],t[3][0],下标出界. 可改为:(*(pt+1))[2]相当于pt[1][

c语言问题-小白c语言求教,求大神解答

问题描述 小白c语言求教,求大神解答 #include int main(void) { int years,days; years=21; days=years*365; printf(" The years is %d. The days are %d. ".years,days); Return 0; } 程序无法运行,提示错误.求大神解答.小弟在这里先谢谢啦. 解决方案 printf(" The years is %d. The days are %d. "