C语言正确定义结构和初值

C语言正确定义结构和初值
2025-02-27 15:24:29
推荐回答(2个)
回答1:

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

回答2:

声明的时候和后续赋值略有不同,在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语言规则允许的。