|
发表于 2023-12-20 22:58:10
|
显示全部楼层
在C语言中,结构体的初始化可以使用两种方式:按顺序初始化和指定成员初始化。
按顺序初始化是指按照结构体定义中成员的顺序进行初始化。例如,char a会被初始化为'x',char c会被初始化为'o',int b会被初始化为520。
指定成员初始化是指在初始化时通过成员名指定要初始化的成员。你可以使用{.成员名 = 值}的形式,表示要初始化该成员。这种方式可以不按照结构体定义中成员的顺序进行初始化。
你的代码中,按照指定成员初始化的方式是正确的。你使用了{.c = 'x', .a = 'o', .b = 520}来初始化结构体a的成员。这样做是可以的,但是你在写成员初始化时,没有加上引号,应该修改为{.c = 'x', .a = 'o', .b = 520}。
关于报错的问题,可能是因为你在#include行之前使用了printf函数,导致编译器无法识别printf函数。应该将#include放在程序开头。
下面是修改后的可以正常运行的代码:
- #include <stdio.h>
- int main(void)
- {
- struct A
- {
- char a;
- char c;
- int b;
- } a ={.c = 'x', .a = 'o', .b = 520};
- printf("sizeof(a) = %lu", sizeof(a));
- return 0;
- }
复制代码
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|