首页
社区
课程
招聘
请教C的语法高手:如何给union类型的全局变量赋初值?
发表于: 2013-7-17 18:19 12124

请教C的语法高手:如何给union类型的全局变量赋初值?

2013-7-17 18:19
12124
struct yy
{
    union xx
    {
        double a;
       char* p;
    };
    byte c;
};

yy demo = {{"ffff"}, 0xff};
main()
{
}

本意是想给union中的字符串变量给初值,但好像是只能给默认第一个变量的类型,现在给char*过不了,高手给支个招?

一定要是给全局变量赋初值

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 959
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
联合变量可以被初始化,但这个初始值必须是联合第一个成员的类型,而且它必须位于一对花括号里面。例如,
union {
        int a;
        float b;
        char c[4];
} x = {5};

把x.a初始化为5.
我们不能把这个变量初始化为一个浮点值或字符值。如果给出的初始值是任何其他类型,它就会转换(如果可能的话)为一个整数并赋值给x.a

--以上为《C和指针》10.6.2 联合的初始化章节
2013-7-17 19:04
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=ybhdgggset;1199930]联合变量可以被初始化,但这个初始值必须是联合第一个成员的类型,而且它必须位于一对花括号里面。例如,
union {
        int a;
        float b;
        char c[4];
} x = {5};
把x.a初始化为5.
我们不能把这个变量初始化...[/QUOTE]

这么说就是无解了?可怜的人……

c99用.b就可以赋值,现在c89完了
2013-7-17 19:07
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
4
struct yy
{
    union xx
    {
       char* p;

        double a;

    };
    byte c;
};

这样不就好了
2013-7-17 19:16
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
不行的,原因在于这个结构被多次定义全局变量,有的给第一个赋值,有的给第二个赋值,怎么改都通用不了的
2013-7-17 19:21
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
6
那为啥不分卡,每种定一个结构体
2013-7-17 19:24
0
雪    币: 65
活跃值: (112)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
搞清楚联合的意义好不好。

union TYPE_X
{
    int a;

    char* pStr;
};

实际上你自己定义个数组不就好了

char g_Data[]={0xFF,0xFF,0xFF,0xFF};

或者

char g_Data[]={"fdfgdgfgfg"};

需要用时

TYPE_X *  pVar=(TYPE_X *)g_Data;
2013-7-17 19:54
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
[QUOTE=mccoysc;1199947]搞清楚联合的意义好不好。

union TYPE_X
{
    int a;

    char* pStr;
};

实际上你自己定义个数组不就好了

char g_Data[]={0xFF,0xFF,0xFF,0xFF};

或者

char g_Data[]={...[/QUOTE]

联合还有啥意义不意义的,用过c的人都知道,又不是复杂的东东
我只求看有没有给第二个赋值的方法,不能改的原因主要是该声明被很多地方用来定义全局变量了
你想想如果人家已经用来定义100个对象,我一个个改明显是不明智的方法
而且我也说了,c99完美支持给任意元素赋值,所以我只想找个c89能模拟的方法而已,当然如果找不到也就算了
2013-7-18 09:42
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
如果是我自己定义的,好办
问题是人家定义的,而且类似的定义非常多,而且被用来声明了N个变量,如果大改,就不合适了
2013-7-18 09:44
0
游客
登录 | 注册 方可回帖
返回
//