无法为全局结构中的变量设置值?

时间:2015-10-24 09:04:23

标签: c

struct ball{
    int a;int b;
};

struct ball x;
x.a = 10;   x.b = 20;

int main() {
    x.a = 25; x.b = 50;
    printf("%d %d\n",x.a,x.b);
}

为什么这段代码不起作用。我试图设置struct ball x;作为全局变量,然后设置a和b的值。

这是终端错误:

x.c:54:1: error: unknown type name 'x'
x.a = 10;   x.b = 20;
^
x.c:54:2: error: expected identifier or '('
x.a = 10;   x.b = 20;
 ^

4 个答案:

答案 0 :(得分:3)

作业

x.a = 10;

是表达式语句的示例。表达式语句(一种评估表达式的语句,具有可观察的效果)仅允许在函数中使用。

定义变量时可以初始化struct。例如;

struct ball x = {10, 20};

定义x(类型为struct ball)并初始化其成员(按顺序)。像这样进行初始化的变量定义不仅限于在函数体中使用。

对于标准C(1999标准及以后),也可以使用指定的初始化程序。

struct ball x = {.a = 10, .b = 20};

答案 1 :(得分:2)

struct ball{
    int a;int b;
};

struct ball x;
x.a = 10;   x.b = 20;  <-- Invalid to have assignment instruction outside of function body

int main() 
{
...
return 0;
}

您打算初始化全局变量。是的,这是允许的,可以按如下方式完成:

struct ball{
    int a;int b;
};

struct ball x = {10, 20};   <-- struct global variable initialization

答案 2 :(得分:1)

这有效

struct ball{
    int a;int b;
};

struct ball x;
//x.a = 10;   x.b = 20;

int main() {
    x.a = 25; x.b = 50;
    printf("%d %d\n",x.a,x.b);
}

答案 3 :(得分:1)

对于全局变量,您只能在所有函数之外完成声明部分(struct ball x)和初始化部分(int a = 0)。 在函数内部,您只能分配或修改全局变量的值。所以,只有你收到这个错误。