首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

构造体全局变量赋值

2013-01-07 
结构体全局变量赋值#includeiostreamstruct s{int aint b}s s1void main(){  s1.a1s1.b2}这样完

结构体全局变量赋值
#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标准规定的。当然,大家也可以试试在同一个函数内,在一些变量定义语句的后面写上赋值语句或其他执行语句,再在后面接着定义其他需要定义的变量,编译系统就会显示错误。



热点排行