[英]How to initialize an array of structs in C
我不明白为什么我的代码不起作用
#include <stdio.h>
#include <stdlib.h>
typedef struct date{
int month, day, year;
} Date;
typedef struct person{
char name[32];
Date date;
}Person;
int main()
{
Person presidents[4];
presidents[0] = {"George Washington", {30, 4, 1789}};
presidents[1] = {"Thomas Jefferson", {4, 3, 1801}};
presidents[2] = {"Abraham Lincoln", {4, 3, 1861}};
presidents[3] = {"Theodore Roosevelt", {14, 8, 1901}};
return 0;
}
这是编译器的 output:
>||=== Build: Debug in MyProject (compiler: GNU GCC Compiler) ===|
>C:\Users\My pc\OneDrive\Documents\c\MyProject\main.c||In function 'main':|
>C:\Users\My pc\OneDrive\Documents\c\MyProject\main.c|16|error: expected expression before '{' token|
>C:\Users\My pc\OneDrive\Documents\c\MyProject\main.c|17|error: expected expression before '{' token|
>C:\Users\My pc\OneDrive\Documents\c\MyProject\main.c|18|error: expected expression before '{' token|
>C:\Users\My pc\OneDrive\Documents\c\MyProject\main.c|19|error: expected expression before '{' token|
>C:\Users\My pc\OneDrive\Documents\c\MyProject\main.c|15|warning: variable 'presidents' set but not used [-Wunused-but-set-variable]|
>||=== Build failed: 4 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
尝试:
Person presidents[] = {
{"George Washington", {30, 4, 1789}},
{"Thomas Jefferson", {4, 3, 1801}},
{"Abraham Lincoln", {4, 3, 1861}},
{"Theodore Roosevelt", {14, 8, 1901}}
};
初始化总是在形式
type var = init_val;
上面的代码显示了如何初始化一个结构数组。 请注意您不需要指定presidents
数组的元素数量,因为编译器将从初始化程序中的元素数量获取它。
作为@RobertoCaboni 答案的扩展,从 C99 开始,您还可以使用复合文字:
Person presidents[4];
presidents[0] = (Person){"George Washington", {30, 4, 1789}};
presidents[1] = (Person){"Thomas Jefferson", {4, 3, 1801}};
presidents[2] = (Person){"Abraham Lincoln", {4, 3, 1861}};
presidents[3] = (Person){"Theodore Roosevelt", {14, 8, 1901}};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.