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;
^
答案 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)。 在函数内部,您只能分配或修改全局变量的值。所以,只有你收到这个错误。