① c語言:例子解釋,關於union
可能的值是266(小尾) 或 17432576 (32 位大尾序) 或 2561(16位大尾)
參考下面的代碼
#include<stdio.h>
union{
inti;
charx[2];
}a;
intmain(void)
{char*p;
inti=0;
a.x[0]=10;
a.x[1]=1;
printf("%d ",a.i);
printf("聯合a共占%d個位元組 ",sizeof(a));
p=(char*)(&a);
for(i=0;i<sizeof(a);++i)
{
printf("0x%08X--------",p+i);
printf("%02X ",*(p+i));
}
return0;
}
② C語言中 union的問題,int i賦初值,輸出k【0】為int的值,但是輸出float j和 k【1】怎麼就不是int的值了
test的三個成員i,j,k共用空間,但要注意,數組k中的元素是各自獨立的
只有成員i和k[0]能得到10
三個成員共用內存空間,因此存儲的內容都是十進制數10(化為二進制保存)
由於十進制10不超過8位二進制,因此對應char類型數組a的第一個元素是正確的,是換行符(內碼為10),使用%d將輸出10
但數組a的後面幾個元素都相當於是沒有初始化(數組元素沒有全部初始化的情況下,未初始化元素都是0或空),因此是默認值0(字元為'\0')
而10的二進制如果作float類型讀取,則是相當於0乘以2的10次方,結果也是0。注意float的二進制長度和int相同,float類型前面是基數後面是指數,因此10被當作指數處理(不過如果用%d來輸出成員j,仍可得到10)
③ C語言 共用體union的問題
首先理解共同體是同一個內存段可以用來存放集中不同類型的成員,但在每一瞬間只能存放其中一個成員,而不是同時存放一個值。你的程序是將123456789L長整型放進去復制給c.a,因此按整數存儲在變數單元中,如果按照「%d」輸出c.a則會輸出123456789,如果按照「%f」格式輸出c.b,系統會將存儲單元中的信息按浮點數形式來處理,其數值部分則為0,所以輸出為0.000000
④ C語言 union聯合體變數 計算問題
union 是共享內存。也就是說,i 和 c[2] 共享內存。
int i; 這里是 short int。
c[0] 在低位元組,這是「小端」碼,PC/widows 用 小端碼 little-endian.
c[1] 在高位。
寫成2進制:
x.c[0]=10; 寫成2進制:00000000 00001010
x.c[1]=1; 寫成2進制: 00000001 00000000
i 寫成2進制:00000001 00001010
換算到10進制
i = 1 * 256 + 1*8 + 1* 2 = 266
直接用10進制 i = x.c[1]*256+x.c[0] = 256+10=266.
⑤ C語言中union如何使用,請給出具體的案例
C語言中,union的使用與struct 的用法非常類似,主要區別在於union 維護足夠的空間來置放多個數據成員中的「一種」,而不是為每一個數據成員配置空間,在union 中所有的數據成員共用一個空間,同一時間只能儲存其中一個數據成員,所有的數據成員具有相同的起始地址。
具體的案例:
union StateMachine
{
char character;
int number;
char *str;
double exp;
};
一個union 只配置一個足夠大的空間以來容納最大長度的數據成員,以上例而言,最大長度是double 型態,所以StateMachine 的空間大小就是double 數據類型的大小。
union,即「聯合」,是一種特殊的類,也是一種構造類型的數據結構。在一個「聯合」內可以定義多種不同的數據類型, 一個被說明為該「聯合」類型的變數中,允許裝入該「聯合」所定義的任何一種數據,這些數據共享同一段內存,以達到節省空間的目的(還有一個節省空間的類型:位域)。 這是一個非常特殊的地方,也是聯合的特徵。另外,同struct一樣,聯合默認訪問許可權也是公有的,並且,也具有成員函數。
⑥ C語言union的用法
1、我們利用C語言定義一個簡單的Union共用體結構。
⑦ c語言結構體初始化(編譯系統vs2010)
.location 這種叫按名稱初始化,是gun對c的擴展,只有gnu支持,就是linux下的編譯器支持(gcc, g++)
程序員寫代碼的時候,最好使用被廣泛支持的標准,盡量不要使用個別編譯器的私有定義。
關注優酷上的 」C學習指南「,在第10章里會講這個問題。
⑧ c語言中的union是什麼意思啊
c語言中的union是聯合體,就是一個多個變數的結構同時使用一塊內存區域,區域的取值大小為該結構中長度最大的變數的值。
聲明一個struct類型,為date,有一個實例變數today,如果int的大小佔4個位元組,第一句輸出12,union表示可以有多種方法來看待這個數據類型,裡面的的數據是共享內存空間的,大小應該是union中最大的類型,第二句輸出8。
所在函數庫為【ctype.h】
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9')
返回非0值,否則返回0
intisascii(int ch) 若ch是字元(ASCII碼中的0-127)返回非0值,否則返回0
intiscntrl(int ch) 若ch是作廢字元(0x7F)或普通控制字元(0x00-0x1F)
以上內容參考:網路-C語言函數
⑨ C 程序設計中,如何對struct中的union數據進行初始化
在結構中增加一個成員,用來表示聯合成員中哪個成員有效。比如:上述結構LEDSTRUCT中增加一個成員uchar ctype;當ctype=0時,un.ch有效;當ctype=1時,un.p有效,當ctype=2時,un.ida有效。只有當聯合中某個成員有效時才能對該成員賦值或取值。
問題補充答復:對union初始化可以有兩個途徑:
1.在聲明union變數的同時進行初始化。此時,初始化成員時必須針對第一個成員變數來初始化。
比如:
uchar p1[32] = "LEDSTRUCT";
uint p2[2] = {100, 200};
struct LEDSTRUCT led[3] = {
{0, {0, 10, 20, 30}},
{1, {((unsigned long)p1 & 0xff), (((unsigned long)p1 >> 8) & 0xff), (((unsigned long)p1 >> 16) & 0xff), (((unsigned long)p1 >> 24) & 0xff)}},
{2, {{((unsigned long)p2 & 0xff), (((unsigned long)p2 >> 8) & 0xff), (((unsigned long)p2 >> 16) & 0xff), (((unsigned long)p2 >> 24) & 0xff)}}
};
注意:由於union的成員變數ida的類型是uint,並且佔用2維共8位元組空間,所以,僅僅通過union的第一個成員變數來初始化ida,不能初始化ida[1]。
2.在聲明union變數之後,再對該變數進行初始化。
比如:
struct LEDSTRUCT led[3];
led[0].cl = 0;
led[0].un.ch[0] = 0;
led[0].un.ch[1] = 10;
led[0].un.ch[2] = 20;
led[0].un.ch[3] = 30;
led[1].cl = 1;
led[1].un.p = "LEDSTRUCT";
led[2].cl = 2;
led[2].un.ida[0] = 100;
led[2].un.ida[1] = 200;
⑩ c語言聯合體的初始化問題
。。。
局部變數不作初始化是隨機值,全局變數會被定義為0;