【问题标题】:Static structure initialization C静态结构初始化 C
【发布时间】:2023-04-05 04:27:01
【问题描述】:

我已经阅读了有关 stackoverflow 的一些答案,但我不知道为什么它仍然不起作用:

typedef struct gnl_struct {
    char        *data;
    int         where;
    int         status;
}               t_gnl;

void display_elem(t_gnl tab, int nbr)
{
    printf("tab[%d]\n", nbr);
    printf("tab.where == %d\n", tab.where);
    printf("tab.status == %d\n", tab.status);

    return ;
}

int     main()
{
    static t_gnl    tab[1000] = {{ "toto", 0, 2 }} ;

    display_elem(tab[3], 3);

    return (0);
}

结果是:

tab[3]
tab.where == 0
tab.status == 0

【问题讨论】:

    标签: c struct initialization


    【解决方案1】:

    在您的代码中,您(您自己)仅初始化了tab[0],而您正在传递tab[3]。数组 [tab[1]tab[999]] 中的所有其他元素自动初始化为0

    【讨论】:

    • @hadesMM 我建议使用循环(如果你真的需要 1000 个元素),或者不要使用数组,如果你只需要一个变量。
    • 即使不是静态的,initlaizer也会保证所有的元素都初始化为零。
    • @bare_metal 对,我会删除那个误导性的部分。
    • 除此之外,您的编译器应该抱怨(至少带有警告)缺少大括号...
    • @hadesMM 你可以像this一样初始化它。但请注意,在大多数系统上,静态分配 1000 个结构并不是一个好主意。对于大量数据,您应该改为在堆上分配内存。
    【解决方案2】:

    您只初始化了第一个数组元素,因此剩余的元素将隐式填充为 0。现在,当您尝试打印第三个元素时,它将为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2021-01-31
      • 2015-10-30
      相关资源
      最近更新 更多