C语言求助,题目有图,希望过程详细一些? 。。
选D
A不完全正确,旧版C不能把共用体变量作为函数参数,C99允许共用体变量作为函数参数。
B不完全正确,不能直接对共用体变量名赋值数值(但是可以用同类型的共用体变量名进行赋值,比如同一种共用体变量a和b,可直接a=b)。
C不完全正确,不能像结构体那样对所有成员初始化,共用体的成员地址不是独立的,共享同一段内存。(但是可以用一个常量来初始化)
下面我写的代码演示上面的特殊使用情况:
#include <stdio.h>
union data{
int n;
char c;
short s;
};
#define M 5
int main()
{
void fun(union data a);//共用体做参数
union data a={M};//用一个常量初始化
union data b;
printf("a.n初值是%d\n",a.n);
printf("调用函数fun,传递共用体参数,实参是a,形参是c\n");
fun(a);
printf("调用结束,实参a.n值不变依然是%d\n",a.n);
//---------------------------------------------------------
b.n=2;
printf("对b.n赋值%d\n",b.n);
a=b;//用同类型b对共用体变量名a赋值
printf("直接用b对a赋值(a=b),赋值后a.n变成%d,b.n=%d\n",a.n,b.n);
a.n=50;
printf("重新对a.n赋值%d,赋值后a.n=%d,b.n=%d\n",a.n,a.n,b.n);
return 0;
}
void fun(union data c)
{
c.n=100;
printf("传参后fun函数中c.n赋值%d\n",c.n);
}