繁体   English   中英

如何在 C 中初始化结构数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM