我想知道是否联合变量将如下的结构变量或不被初始化...工会初始化
#include<stdio.h>
int main(void)
{
struct a
{
int i;
char c;
};
struct a ob={4};
printf("%d",ob.c);
}
上述代码给出0作为输出..
所以当i是初始化c也得到初始化..
在下面的代码...如果工会成员整数也获得了字符数组的初始化这段代码会给出输出515 ...
(我通过为联合分配内存变量使用malloc ..它工作正常。)
#include<stdio.h>
int main(void)
{
union a
{
int i;
char c[2];
};
union a ob;
ob.ch[0]=3;
ob.ch[1]=2;
printf("%d",ob.i);
return 0;
}
但是没有分配内存是否可以初始化int i(在这个代码中int i的十六进制值设置为0x990203)。
我认为99是显示了较高的位不intialized结果..
对吗?..
从您未写入的联盟字段中读取未定义的行为。你*可以*看到任意数据,它不值得你的特定编译器以某种方式做它。 – dasblinkenlight 2012-03-22 14:51:53
@dasblinkenlight:读取你没有写入的成员是已定义的行为 - 但是,如果该成员由没有参与上次存储的字节表示(即,如果被访问的成员的大小大于用于最后一次存储),行为是未指定的;有关详细信息,请参阅http://stackoverflow.com/a/8513748/48015 – Christoph 2012-03-22 14:54:57
您可能是对的,请查看编译器的汇编输出以确保。 – Gowtham 2012-03-22 14:54:58