C里面对结构体赋值的是支持的!
时间:2010-12-20 来源:liliu4239
记得当年在学老谭的那本C语言的书的时候,书中明确说两个结构体变量间赋值需通过对结构体内各个变量的复制来进行,而不能直接用=号来赋值。今天我还笑话了一把实验室同学的无知,结果在gcc中写了一段代码,真的可以对结构体变量直接复制,代码如下:
//test.c
struct ccc{
int t;
};
struct abc{
int a;
int b;
int c;
struct ccc dd;
};
int main(int argc, char * argv[]){
struct abc xx,yy;
xx.a=1;
xx.b=2;
xx.c=3;
xx.dd.t=4;
yy=xx;
return 0;
}
结果在gcc上不带任何选项编译通过,带-std=c89或-ansi用89规范和ansi规范而不打开gcc扩展仍然编译通过,通过GDB查看,发现赋值的确是针对值的,而不是改变了变量指针。然后在VC2005上也可以编译通过并运行,看来C89和ANSI规范中的确已经允许C语言中对结构体变量进行赋值,老谭的书应该修正一下了。 http://nathanxu.blog.51cto.com/50836/56645
//test.c
struct ccc{
int t;
};
struct abc{
int a;
int b;
int c;
struct ccc dd;
};
int main(int argc, char * argv[]){
struct abc xx,yy;
xx.a=1;
xx.b=2;
xx.c=3;
xx.dd.t=4;
yy=xx;
return 0;
}
结果在gcc上不带任何选项编译通过,带-std=c89或-ansi用89规范和ansi规范而不打开gcc扩展仍然编译通过,通过GDB查看,发现赋值的确是针对值的,而不是改变了变量指针。然后在VC2005上也可以编译通过并运行,看来C89和ANSI规范中的确已经允许C语言中对结构体变量进行赋值,老谭的书应该修正一下了。 http://nathanxu.blog.51cto.com/50836/56645
相关阅读 更多 +