39
STD就是结构体类型的别名。由于typedef的时候,只有struct,所以这是一个无名结构。只有通过STD去定义。于是C和D都是错的
而结构体中,c的类型是char,所以也只能用字符型去初始化。B中的"A"和"B"是字符串,所以不对。
选A
40 union中,n和c共用内存。
所以 在这里赋值u1.c为'A'时,等于将n的地位也赋值为'A'了
而以%c输出u1.n时,取的也是u1.n的低字节,也就是'A'
所以会输出A
选C
声明的时候和后续赋值略有不同,在C语言中是两种处理方法。
如有结构体
struct test
{
int a;
char c;
int b;
};
定义的时候,可以
struct test var = {1,'c', 2};
这样初始化,结果为var.a = 1, var.c = 'c', var.b = 2;
但是如果后续赋值
var = {1,'c', 2};
就会报错。因为在C语言中不支持这种形式的操作。
不过可以取巧转换一下,改成
var = (struct test){1,'c', 2};
这样就可以了。 在这种情况下,系统会申请一个临时变量,并初始化为该值,再对var进行赋值。而同类型结构体之间赋值操作是C语言规则允许的。