+ -
当前位置:首页 → 问答吧 → 今天遇到一个结构体赋值问题!求解

今天遇到一个结构体赋值问题!求解

时间:2010-07-26

来源:互联网

#include<stdio.h>
struct stu
{
   int i;
}st1;
st1.i=9;
int main()
{
}


编译提示 sti.i=9;出错。
达人解释下。

作者: shaohui973   发布时间: 2010-07-26

如果是下面那样,编译能通过:
#include<>
int i;
i=9;
int main()
{
}

作者: shaohui973   发布时间: 2010-07-26

达人能解释下吗?

作者: shaohui973   发布时间: 2010-07-26

本帖最后由 wmmy2008 于 2010-07-26 21:11 编辑

#include<stdio.h>
struct stu
{
   int i;
}st1;

int main()
{
    st1.i=9;
}

或者:

struct stu
{
   int i;
}st1={.i = 9};

int main()
{
}

作者: wmmy2008   发布时间: 2010-07-26

在c++环境下,i=9;也是编译不过去的,所以楼主说的是c编译环境吧;
c的标准有关吧,
st1.i 不是标准类型,编译器不能识别,程序体外要么函数申明或者类型定义的,st1.i不是标准的类型所以不能识别吧;
变量初始化是需要在函数中执行的~~
至于i=9为什么能执行这个可能和具体的编译器有关和c标准有关吧,不知道是不是所有的c都能编译过。
我认为c能编译过是c编译器原因,把代码进行优化,还是执行int i=9;这个操作~~~

作者: zbhddt6   发布时间: 2010-07-26

编译器遇到st1应当认为没有这个类型,他不是标准的type,也不是经过typedef定义的结构~~所以编译器不认识~~~

作者: zbhddt6   发布时间: 2010-07-26

函数体外只能声明或定义,不能进行赋值吧?

第一个错就不用说了

第二个之所以还能编译过去是因为编译器把"i=9"当成未指定类型的定义了,默认设成int.所以勉强通过

作者: liwangli1983   发布时间: 2010-07-26



QUOTE:
函数体外只能声明或定义,不能进行赋值吧?

第一个错就不用说了

第二个之所以还能编译过去是因为编译器 ...
liwangli1983 发表于 2010-07-26 21:39




    正解

作者: zhangsuozhu   发布时间: 2010-07-26

第二个应该叫外部变量赋初值吧,
第一个明显不是。

可以实验一下,呵呵。

作者: pandaiam   发布时间: 2010-07-26



QUOTE:
函数体外只能声明或定义,不能进行赋值吧?

第一个错就不用说了

第二个之所以还能编译过去是因为编译器 ...
liwangli1983 发表于 2010-07-26 21:39




    实验了一下,发现这个是对的。
i= .... 这里默认把i当作int形变量了,int正好和前面定义的 int i是一样的,所以会通过,但还是有警告。
float i,然后 i = 0.1,这个时候还是会把i当作int型,此时int和前面的float类型冲突,然后就会报错了。

作者: pandaiam   发布时间: 2010-07-26

相关阅读 更多