一道關於二級C的題目,讓我百思不得其解

2022-06-08 09:01:51 字數 1190 閱讀 3356

1樓:匿名使用者

呵呵,看了你對union還沒弄明白。

1 union不是結構,它的空間大小是裡面最大成員的大小。

以上例為例:

sizeof(a) = sizeof(a.i)

2 第二union裡無論怎麼放,都占用同樣的記憶體空間。

裡面的i,k,c不是獨立的成員,而是對這段記憶體空間的取用方式。

s->i[0]=0x39;

s->i[1]=0x38;

上面這兩句,是在union a的第乙個4個位元組和第二4個位元組分別放如兩個值。(int佔4個位元組)

s->c[0]僅僅是把第乙個位元組的記憶體資料取出來,然後做字元來列印。

總結:1 union是c特性最大的乙個語法點(所以一般高階語言都沒有對應的語法,c++相容c除外)

2 可以這麼理解,union的內部定義成員,其實並不是獨立的變數,而僅僅,注意僅僅是對這段記憶體空間儲存的介面方式。

3 union可以按照一種型別往裡放,然後按照以外一種型別方式把同樣記憶體空間的資料按照它的型別取出來。

如果用乙個形容:

1 無論放進去的是什麼,你想它是什麼,它就可以是什麼。

2 無論union怎麼定義,你想怎麼放進去,就可以怎麼放進去。

union是乙個典型的c概念語法點,優秀的c程式設計師的眼中,只有記憶體空間,沒有型別約束。

2樓:匿名使用者

那是乙個聯合體,裡面的元素共用記憶體空間,給其中乙個賦值了,其他的相應記憶體位置也就有值了。i[0]=0x39,c[0]也就是0x39,ascii碼的0x39就是字元9

3樓:匿名使用者

你定義的為共用體 9的ascii碼為57

4樓:匿名使用者

union是共同體結構,在內在上是其用空間的,你對i[0]和i[1]賦值,其實也改變了c的值,但是不同 的機器的其資料儲存方式不同,或大端或小端儲存,還有不同的資料型別,其大小也不一樣,所以你的c[0]值也不會是乙個完全確定的值,就是這樣,如果你還有什麼不懂,可以上網找c語言共同體的資料看看,或者繼續問我也行.

5樓:匿名使用者

你好,我是這樣理解的。union型別是多成員變數共用記憶體,所以c[6]和i[4]的起始位址相同,char是佔乙個位元組,而機器數的儲存高位在後,低位在前,0x39儲存格式是09 03,int佔兩個位元組,所以c[0]讀到的是09

一道國家二級計算機c語言題目,我看不懂,求大神解釋下程式

sort函式是排序,在排序過程中,要用到交換兩個數,交換兩個數由swap函式完成。9 由於swap函式定義出現呼叫之後,所以要在呼叫之前先對swap函式宣告,函式宣告是函式首行後加分號,所以選擇c。10 sort函式是排序,要傳過來陣列,和陣列的大小。11 對swap函式進行呼叫,根據函式定義首行,...

C語言的一道題目,C語言tow函式題目一道

include include 標頭檔案 include 標頭檔案 int main int a 111 b 100 c 111 n,m,k 0,t,l 0,s scanf d d n,m srand unsigned time null srand 就是給rand 提供種子 for int i 0...

C 類的一道簡單題目,C 的一道簡單的題目。。

class cdemo void main int demo 表示強制型別轉換。把cdemo型別的指標轉換成int 型 int demo 1 指標向下移動一位,正好指向b的位址。int demo 1 向b這個位址裡面寫入20 int demo 4 20 你這樣寫成什麼了?4是什麼意思?所有型別的指標...