我想知道是否聯合變量將如下的結構變量或不被初始化...工會初始化
#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