【问题标题】:Assigning a value to structure element out side main [duplicate]将值分配给主外部的结构元素[重复]
【发布时间】:2017-07-19 19:39:32
【问题描述】:

我创建了一个包含两个元素的结构,并尝试为 main 函数之外的一个结构元素赋值。但是我在编译时遇到了错误。

#include <stdio.h>
#include <stdlib.h>
struct node{
    char a;
    int b;
};
struct node sr;
sr.b = 48;
int main(){
    printf("Value:%d",sr.b);
    return 0;
}

我在声明后赋值。为什么这段代码会出错。

错误信息

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token

【问题讨论】:

  • 您不能在函数之外进行任何分配。可执行代码只能驻留在函数内部。
  • struct node sr = { .b = 48 };这样分配为初始化器

标签: c gcc structure variable-assignment


【解决方案1】:

您不能有需要在main() 之外运行时执行的语句,即在文件范围内。它需要存在于某个块范围内,在一个函数内,以便确定 何时 被执行。

但是,您可以使用initialization 为结构类型变量的成员存储初始值。类似的东西

 struct node sr = {'Z', 1};

会将sr.a 初始化为'Z' 并将sr.b 初始化为1。如果您只对初始化成员 b 感兴趣,您将需要 designated initializers,例如

struct node sr = { .b = 1 };

【讨论】:

    【解决方案2】:

    将以下几行放入 main() 函数中。

    struct node sr;
    sr.b = 48;
    

    为什么?您不能有需要在main() 之外运行时执行的语句。它需要在块的范围内,例如在函数内部,以便确定何时执行。

    【讨论】:

    • 确实如此,但 OP 可能已经知道这一点。
    • 这个问题是在寻找一个解释,而不仅仅是为了工作代码。您的回答没有为提问者提供任何见解,可能会被删除。请edit解释导致观察到的症状的原因。
    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    相关资源
    最近更新 更多