c語言共用體問題,C語言共用體問題

2022-03-04 07:36:03 字數 2437 閱讀 9367

1樓:匿名使用者

這是大小端問題,所謂大小端就是數字的低位高位儲存在地址的低位還是高位的問題

大端是地址高位儲存數字的高位,小段則相反。那麼根據陣列的特性,地址低位儲存的肯定是10,高位儲存的是1。而且還要看int有多少位,一般都是32位。

如果是大端,則數字x.i的值為:0 * 2^24 + 0 * 2^16 + 1 * 2^8 + 10 * 2^0 = 256 + 10 = 266

如果是小端,則數字x.i的值為:10*2^24 + 1 * 2^16 + 0*... = 167837696(應該是這個數)

不同的編譯器可能大小端不相同,所以導致了這種情況

2樓:匿名使用者

由於8位代表一個位元組所以有下列算式:

x.c[0]=10 (10轉化為二進位制 為 0000 1010)

x.c[1]=1 (1轉化為二進位制 為 0000 0001)

目前多數編譯器為大端儲存方式 所以記憶體裡存放的數為 0000 0001 0000 1010 (為256+8+2 = 266)

3樓:匿名使用者

這要看x在記憶體中的資料儲存方式才能明白了……

4樓:逍遙足球子

來學習了,膜拜1987大神

c語言共用體問題

5樓:大維

計算機儲存的時候是把! 高位存在高地址 地位存在低地址! k佔用兩個位元組,k的高位對應的就是共用體陣列i的i[1],低位對應的就是i[0]

6樓:

圖上已經畫的很明白了啊,這個共用體是個兩位元組的物件,前一個位元組是0x02,後一個位元組是0x00,所以在printf的時候,先按照短整型取出資料0x0002(注意x86架構是小端模式,低位元組在前),再promote成為整型0x00000002,最後輸出的結果是2。

好好學習天天向上

7樓:自我程式設計

共用體,就是成員變數共用記憶體地址。

這裡記憶體低地址(r.i[0]),高地址(r.i[1]),分別儲存十進位制數2和0。在記憶體中以2進位制儲存,就分別是:

00000010和00000000。

當大端模式,高位資料在低地址,r.k讀取的數字就是00000010,00000000,也就是十進位制的512。

當小端模式,高位資料在高地址,r.k讀取的數字就是00000000,00000010,也就是十進位制的2。

所以你圖中結果,是因為你電腦是小端模式。

8樓:匿名使用者

低位先存 低位為2高位為0值為z

9樓:匿名使用者

x86短整兩位元組,高位元組在後。

則00000000 00000010(2)=2(10)如果交換r.i[0]=0,r.i[1]=2,則00000010 00000000(2)=512(10)

c語言共用體問題

10樓:匿名使用者

選擇c:公用體所佔的記憶體的長度是其成員型別的最大長度,此記憶體某一時刻只能存放一種資料,結構體內可以有公用體,公用體內也可以有結構體。

11樓:驕陽似火任響

其實這個方法,也不是沒人想到過,可是能不借助地球上的知識想到這個辦法的,都是

c語言中共用體問題

12樓:匿名使用者

樓主的意思是數出的結果應該是5.00000這個結果吧!

其實不然,首先你要理解共用體的含義,它不是表示共用體能夠同時放入三個不同類系的資料。共用體實際上只有一個儲存單位,在每一個瞬間只有一個型別的資料被存入裡面,也就是它才起作用,你這裡把data.a=5,說明共用體中整形數被賦值,這裡的data.

b,data.c就不存在了,所以只能正常的輸出a的值,而數出b和c的值都是錯誤的。

如果你再賦值data.b='d',那麼這個共用體的值就是d,其它兩個型別不起作用。也就是說,共用體的資料在某一個瞬間只有一個資料型別其作用,其它幾種都是不存在的!

13樓:匿名使用者

共用體型別資料的特點:

1) 同一個記憶體段可以存放幾種不同型別的成員2) 共用體變數中起作用的成員是最後一次存放的成員3) 不能對共用體變數名賦值,不能在定義時初始化。

4) 不能把共用體變數作為函式引數

5) 共用體型別可以出現在結構體定義中,反之也可,也可以定義共用體陣列。

另外,結構體名可以作為引數,而共用體名不可以。

14樓:匿名使用者

union的記憶體結構

a = 5

b = 5

c = 2.470328229206e-323 = 0

15樓:【【忘記

a=5,幹嘛輸出c!

C語言與C語言能夠共用嗎C語言和C語言的區別是什麼?

可以共用的。具體取決於使用的編譯器。使用c編譯器 c編譯器是不支援編譯c 的。因為c 有很多c語言標準沒有定義的擴充套件。所以同時存在純c和c 的話是不能通過c編譯器的編譯的。使用c 編譯器c 是c語言的擴充套件延伸,c 設計之初就考慮了完全相容c語言的。所以純c或是混合c c 專案都是可以被c 編...

C語言結構體,C語言結構體定義

sort函式引數裡寫的是陣列,因此呼叫函式的時候傳的是變數的地址,當結構體變數的值在sort函式發生變化的時候,在主函式的值也會發生同樣的變化,因此這個函式其實不需要返回一個具體的數值,寫return就可以了。其實如果不需要返回值的話,可以直接定義為void型別,這樣就不需要return語句了。so...

在C語言中,結構體和共用體的概念和兩者的區別是什麼啊

結構體與共來用體 1.結構源體 struct 定義 結構體是由一系列具有相同資料型別或不同資料型別的資料構成的資料集合。例子 struct student 2.共用體 union 定義 union維護足夠的空間來放置多個資料成員中的 一種 而不是為每一個資料成員配置 空 間,在union中所有的資料...