结构体全局变量赋值
#include<iostream>
struct s
{
int a;
int b;
};
s s1;
void main()
{
s1.a=1;
s1.b=2;
}
这样完全正确,可下面为什么错了呢?
#include<iostream>
struct s
{
int a;
int b;
};
s s1;
s1.a=1;
s1.b=2;
void main()
{
}
[解决办法]
没在写在方法体里面
#include <iostream>
struct s
{
int a;
int b;
};
s s1;
void main()
{
s1.a=1;
s1.b=2;
}
[解决办法]
外面只能进行声明、初始化,不能进行赋值。
要赋值必须写在方法中。
[解决办法]
外面只能进行声明、初始化,不能进行赋值
上面这句话是比较牵强的,赋值还是可以的,具体来说这和编译系统有关。举个例子吧:感性认识一下:
int a[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
void main(void)
{
......
}
上面幾段代碼编译是有错的,因为对于全局变量或者结构的符合类型,要赋值只能在定义的时候赋值,像上面的几句赋值属于执行语句,所以不行的,编译系统在编译阶段只识别全局变量的地址,和分配空间,并给定初值,对于全局变量,如果不进行显式赋值,就默认为0。具体的规则各参考书上都有说明。
再看下面正确的代码:
int a[3] = {1,2,3};
void main(void)
{
.....
}
上面的代碼是正确的,数组也被赋了初值,因为这是再定义阶段赋值的,所以编译器再编译的时候会吧值放到分配的空间中去。
总结,结构体也是同样道理,只要再定义结构体的时候并同时赋值就没问题的,一般执行语句都要放再定义或申明的后面,这是C标准规定的。当然,大家也可以试试在同一个函数内,在一些变量定义语句的后面写上赋值语句或其他执行语句,再在后面接着定义其他需要定义的变量,编译系统就会显示错误。