c - 如何正确地为数组(结构类型)元素赋值?

标签 c arrays struct variable-assignment compound-literals

#include <stdio.h>

struct virus
{
    char signature[25];
    int size;
}v[2];

int main(void) {

    static v[0] = {"Yankee",1813};
    static v[1] = {"Doodle",2813};
    int i;

    for(i=0;i<=1;i++)
    {
        printf("%s %d\n",v[i].signature,v[i].size);
    }

    return 0;
}

我在这段 C 代码中遇到编译器错误。

Error: Declaration syntax in function main()

我猜测 v[2] 中存在一些错误,因为它与外部类关联,而 v[0]v[ 1] 与静态类相关联。

但是,我不确定这是唯一的原因还是其他原因?


编辑:我通过删除错误的语法来编辑代码。

最佳答案

v[2]的声明没有错误,问题在后面。

你写了

 static struct v[0] = {"Yankee",1813};

尝试 定义大小为 0 的数组,默认情况下 C 标准不允许这样做。

也就是说,语法也错得离谱。你没有正确的类型,记住,struct本身不是类型,它是关键字。 struct <something>实际上是一个类型

那么,从逻辑的角度来看,您可能根本不需要一个新变量。如果您想使用 v 中的数组元素,只需使用变量名即可。有点像

#include <stdio.h>

struct virus
{
    char signature[25];
    int size;
}v[2] = { {"Yankee",1813}, {"Doodle",2813}}; //get it initialized, job done

int main(void) {

    int i;
    for(i=0;i<=1;i++)
    {
        printf("%s %d\n",v[i].signature,v[i].size);
    }

    return 0;
}

将以更好的方式完成工作,恕我直言。


编辑:

如果您对分配单个元素感兴趣(不是 初始化),那么,您不能为此目的使用大括号括起来的初始化器,它并不意味着是赋值的 RHS 操作数.您需要使用 compound literal 为此目的,像

v[0] = (struct virus){"Yankee",1813};
v[1] = (struct virus){"Doodle",2813};

也会完成这项工作。

关于c - 如何正确地为数组(结构类型)元素赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42572117/

相关文章:

c - 将命令行 Linux 转换为 makefile

c - 使用 `GCCs` 预处理器作为汇编程序

c - 我的链表中第一个节点中的数据不断更改为列表中的最后一个节点。 C语言

c++ - 结构和指针程序错误(结构,C++)

c++ - 为什么我在抽象类中使用结构时遇到问题?

c - for 和 while 循环中没有循环条件

c - C 中的指针转换和指针大小

c - 如何将结构初始化为指向结构

Python:如何将数据拆分为不同数据类型的二维数组

ios - 将数组保存到 userDefault