结构体能这么赋值吗?

[复制链接]
5588|13
 楼主| entepino 发表于 2010-10-15 23:30 | 显示全部楼层 |阅读模式

结构体

typedef
struct {


unsigned char
status01;


unsigned char
status02;


unsigned char
status03;


unsigned char
status04;


} tag_STRUCT_FLAG;


tag_STRUCT_FLAG
tag_struct_flag ;

#define
tag_struct_flag_default
{0x00,0X00,0X00};

tag_STRUCT_FLAG
=
tag_struct_flag_default ;

就是tag_struct_flag_default只有三个数,而tag_struct_flag这个结构体有四个char变量,能这样赋值吗?
highgear 发表于 2010-10-15 23:47 | 显示全部楼层
原野之狼 发表于 2010-10-15 23:52 | 显示全部楼层
不同意2L意见 变量在函数外赋值需要在变量定义时就赋值 否则编译报错
typedef
struct {

unsigned char
status01;

unsigned char
status02;

unsigned char
status03;

unsigned char
status04;

} tag_STRUCT_FLAG;


#define
tag_struct_flag_default
{0x00,0X00,0X00};
tag_STRUCT_FLAG
tag_struct_flag = tag_struct_flag_default ;
highgear 发表于 2010-10-16 00:10 | 显示全部楼层
还是原野之狼的眼睛好使, 不愧是从原野出来的, 楼主的定义确实不对。不过可以用 3常数初始化4变量结构, 某些编译器还支持更变态的初始化方法。
原野之狼 发表于 2010-10-16 00:34 | 显示全部楼层
嘿嘿 已昏人士嘛:lol
 楼主| entepino 发表于 2010-10-16 10:22 | 显示全部楼层
那说明status01=0x00,status02=0x00,status03=0x00,那status04等于什么?没有赋值,编译器是不是直接赋值为0?
liang7143 发表于 2010-10-16 15:09 | 显示全部楼层
6# entepino
对于全局变量,编译器一般都会按默认初始化,比如整形为0,浮点型为0.0,
局部变量一般不会初始化,是一个随机值··
 楼主| entepino 发表于 2010-10-16 16:32 | 显示全部楼层
好的,谢谢。
jack_shine 发表于 2010-10-16 18:02 | 显示全部楼层
zhangshaoyan 发表于 2010-10-16 18:22 | 显示全部楼层
这种问题最好不要问,最好的方法就是试一下,用一下GNU的编译器,再用一下Microsoft的编译器,再用一下Borland的编译器,就能得到结论。
奇兵 发表于 2010-10-16 19:40 | 显示全部楼层
呵呵 tag_struct_flag = tag_struct_flag_default ;这个貌似不对呀!结构体的赋值应该用,结构体体的引用“结构体变量名.成员名”
原野之狼 发表于 2010-10-17 00:24 | 显示全部楼层
11L说的不对 3L的程序我已经测试过了
结构体变量在定义的时候是可以采用这种方式来做初始化的 只是在具体语句的时候不能使用直接使用赋值操作
例如
struct _tag_st_test
{...};

void foo(void)
{
    struct _tag_st_test var1 = {...}; // OK
    struct _tag_st_test var2;

    var2 = var1; // ERROR
}
奇兵 发表于 2010-10-17 18:57 | 显示全部楼层
小狼struct _tag_st_test var1 = {...}; 这个初始化的语句赋值方式正确!但 var2 = var1; 这个就想不通了!这是结构体变量的引用了!:dizzy:
李冬发 发表于 2010-10-18 23:06 | 显示全部楼层
C的99标准是可以结构整体赋值的。之前的标准则不能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

214

主题

653

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部