1樓:網友
十六進位制的0x39表示的是十進位制的57,而ascii**為57的值代表的是字元9,所以當printf以%c格式輸出時,為字元'9',,而共用體長度為4,定義i陣列時資料沒有被覆蓋,如果在s->i[0]=0x39;s->i[1]=0x38;後加上 s->k=70; 則輸出為f,因為共用體的性質,s->c[0]的值變為70,而ascii**為70的值代表的是字元f,--這樣說清楚不?
2樓:不破_樓蘭
首先你必須了解union中的變數是共享記憶體的,每個int佔兩個位元組,每個char只佔乙個位元組,所以i和c陣列共享4個位元組的空間。
第二個問題就是,資料在記憶體中的排列方式,0x39實際為0x0039,假設4個位元組的位址分別為a0,a1,a2,a3,則a0中存放的數字是0x39,a1是0x00這就是乙個完整的int的儲存方式,同理a2是0x38,a3是0x00.
第三個問題:因為是共享記憶體所以c[0]指向的就是a0位址乙個位元組的內容即0x39,因為你輸出的是字元,所以0x39十進位製數為57(ascii碼值),對應的字元就是 9.
3樓:杜思菱
因為聯合體是共享記憶體位址的,既i[0] k c[0] 如果呼叫的時候 他們的記憶體位址是一樣的。 而你使用指標最後列印指向 c[0]的記憶體位址既就是指向i[0]的記憶體位址。就等於 printf("%c",s->i[0]);了 結果所以為9
還有什麼問題不 關於聯合體的。
C語言問題,C語言問題
符合,相當於一個字元,ascii字元可以直接轉成short整型數字。101 不符合,這是一個字串,不能作為常數。不符合,因為 會對雙引號轉義,找不到另一個雙引號。會出錯。而且就算是 也不符合,因為編譯器會把它理解成一個字串,而非單個字元。e3不符合。019不符合,0開頭代表8進位制數,不能出現9。0...
C語言問題,c語言問題
這是值傳遞,值傳遞的過程的是,系統會給你的實參的值進行乙個拷貝,把這個拷貝傳遞給形式引數。因為是拷貝,所以實參裡頭的值是不會改變的。如果是位址傳遞就不一樣了。補充 你可以定義乙個指標,這個指標指向主函式的結構體。然後子函式的形參也定義乙個指向結構提的指標。這樣就是位址傳遞了。樓主還是好好花點時間看看...
c語言問題,求助,C語言問題,求助!!!
這種問題用哈夫曼樹的逆向思想就可以解決了,所以我建議還是自己按這思想好好研究一下。自食其力。c語言問題 因為 define s a p a a 定義後 是直接替換 運算過程是這樣的 3 3 5 3 5 所以是29 弱勢這樣定義的 p a a 結果就是192 3 3 5 3 5 9 15 5 29 巨...