如何正确地将值分配给数组(结构类型)元素?

Posted

技术标签:

【中文标题】如何正确地将值分配给数组(结构类型)元素?【英文标题】:How can I properly assign a value to an array (of structure type) element? 【发布时间】:2017-07-23 03:56:45 【问题描述】:
#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 代码中遇到编译器错误。

错误:函数main()中的声明语法

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

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


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

【问题讨论】:

您需要花费数小时或数天时间阅读有关 C 编程语言的知识。在此之前不要触摸键盘。 在`main`中也删除static @ammoQ 删除仍然没有帮助。错误依然存在。 @Barry 对不起,我的错误。初始化例如struct xyz v = 1, "foobar" ; 有效,但类似的作业 v = 1, "foobar" ; 无效。 【参考方案1】:

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

你写过

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

试图定义一个大小为 0 的数组,默认 C 标准不允许这样做。

也就是说,语法也非常错误。你没有合适的type,记住,struct 本身不是一个类型,它是一个关键字。 struct &lt;something&gt; 实际上是一个类型

那么,从逻辑的角度来看,您可能完全不想要一个新变量。如果您想使用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;

也会做这项工作。

【讨论】:

v[0] = "洋基队",1813;但是为什么这也不起作用? 如果我只写 v[0] = "Yankee",1813 。它仍然无法正常工作。您能否提供一些基于此的理由。此外,我得到了你的答案。 @SouravGhosh 谢谢 :)) 学习新东西。 @Barry 不客气,这就是在这里的全部意义,不是吗?快乐学习。 :) @Barry 什么样的参考? did you see this?【参考方案2】:

不要将结构定义与变量声明混为一谈,这是一种草率的做法。

改为使用 typedef:

typedef struct 

    char signature[25];
    int size;
 virus_t;

那么你就可以随意声明这个类型的变量了:

static virus_t v[2] = 

  "Yankee",1813,
  "Doodle",2813
;

或者用指定的初始化器

static virus_t v[2] = 

  [0] = "Yankee",1813,
  [1] = "Doodle",2813
;

【讨论】:

谢谢!!非常有用:)

以上是关于如何正确地将值分配给数组(结构类型)元素?的主要内容,如果未能解决你的问题,请参考以下文章

无法正确地将值从父母传递给孩子和孩子传递给父母

如何循环遍历熊猫数据框,并有条件地将值分配给变量的一行?

双指针将 char 数组值分配给 char 数组,结构使用 char 指针

我应该如何释放类型映射中为 argout 结构数组分配的内存?

尝试将变量值分配给结构元素。起初变量有正确的值,但结构元素有垃圾值

如何正确地将这些转换为 c#,marshall,以便我可以将这些结构传递给 DLL (c++)?