共用體變數的問題,c語言共用體問題

2023-01-18 08:25:35 字數 3693 閱讀 1728

1樓:匿名使用者

公用體的意思就是他的成員都是重疊在一塊記憶體上的,也就是i和c是同一塊記憶體,對c賦值了,就改變了i的值。這裡,把int型的i的第一個位元組(最低位)賦值12,第二個位元組賦值1,所以i的值就成了1*256+12=268。

2樓:情感世界

00000001 00001100==268 (用計算機自帶的可以計算出來)

你要知道共用體是看佔用最大記憶體的成員所佔的儲存空間的,,所以int 佔用為4(在vc++中)個位元組,也就是說共用體u佔用4個位元組的空間..

x.c[0]=12 12的二進位制:00001100x.

c[1]=1 1的二進位制:00000001陣列開闢空間也是從低地址到高地址的連續的空間,so x.c[0]在低位,1在高位

3樓:匿名使用者

這要理解共同體的原理了,共同體中每個變數都佔用同一個記憶體空間的,所以雖然i沒有賦值,但c賦值了,所以i也有值,i的低兩位正好是c[1]和c[0],所以i=100h+12=268

c語言共用體問題

4樓:匿名使用者

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

5樓:驕陽似火任響

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

關於一個c語言共用體賦值問題

6樓:以辰良況樹

首先:在我們常用的系統中,存放的變數經常是從右向左存放的.

比如你定義了c1和c2

那麼在計算機記憶體是這樣的順序:

c2,c1

你的共用體好像有個問題,我沒發現x的定義

不過我假設你的x是個int,那麼x與c2,c1共用同一塊記憶體,這就是共用體的意思

當你給x賦值,也是給c2,c1賦值,

並且0x12放到了c2的位置,34放到了c1位置所以,就產生了你所說的結果

7樓:匿名使用者

這一點教科書說的是對的

只有成員c值是可確定的,其餘成員的值在不同的編譯器,不同的編譯選項下結果可能不同

主要是位元組序的問題,也就是使用大端模式還是小端模式的問題

8樓:餘士恩終辰

首先,你第三行落了一個分號;

其次,c語言多次賦值是允許的,但重複定義是不允許的。

char

a='a';//定義了a,且賦了初值『a』

char

a='b';//重複定義了a

最後,你想多次賦值時不需要加上型別修飾符,那樣是定義變數。

例如定義a,並賦初值'a',第二次賦值'b',覆蓋其初值char

a='a';//定義了a,且賦了初值『a』;

a='b';//再次給a賦值'b',覆蓋了它的初值'a';

請教大家一個c語言中共用體變數的問題?

9樓:

那倒不一定,你可以初始話的時候填2.3,4.5之類帶小數的常量,但賦給s1,s2的時候,只會取整數部分。

當然不是。s1和s2是不同的兩個變數,當然佔用不同的記憶體單元。

c++中為何不能對共用體變數名賦值?

10樓:

又有一位譚浩強學生了。。。

共用體非常重要的一點就是多種型別的覆蓋性,上面的原則也大略都從此而來。在進行上面所列的四種操作時,都會產生型別上的不確定性。

但是,實際上並非如此。

1.共用體雖然集合了多種型別,但它自身卻有固定的大小(大到足夠放下最大的型別),賦值時,只需複製記憶體塊即可。

2.當引用共用體變數時,當然得到了該種型別的一個值,比如在函式中傳遞引數時就是取了該變數的值。

3.定義共用體變數時完全可以進行初始化,但是隻能對其第一個型別進行。

4.如同結構體一樣,共用體同樣可以作為引數傳遞。

可用如下**進行驗證與學習:

#include

typedef unionmydata;

void myfunc(mydata data)

int main()

; //定義共用體變數時初始化(使用第一個型別)

mydata data2;

//共用體有確定的大小,引用時便可得到該型別的值

myfunc(data); //可以作為引數傳遞

data2.i=291;

data=data2; //可以相互賦值

myfunc(data);

return 0;

}當然了,有一些事情雖然是可行的,但並不建議去做。

好了,先這樣吧,多實踐一下吧。

11樓:匿名使用者

共用體共用記憶體的,要通過其成員才直接儲存的資料是什麼型別的

12樓:匿名使用者

可以給變數賦值,但是不能給變數名賦值

共用體變數可以作為函式引數嗎?

13樓:自我程式設計

union 共用體/聯合體 ,共用體變數可以作為函式的引數,包括實參 和 形參。

和結構struct相比較,最大區別是:

struct成員記憶體是獨立的,整個結構大小等於其成員大小總和。

而union成員記憶體是共用的,給一個成員賦值,將覆蓋其他成員地址裡的值(從地址低位開始覆蓋)。整個共用體大小等於其最大的成員大小。

我寫了一個案例,用事實說話:

#include

typedef union unun;

void pu(un un)

int main()

14樓:匿名使用者

不能把共用體變數作為函式引數,也不能使函式帶回共用體變數,但可以使用指向共用體變數的指標

15樓:匿名使用者

以前的c不能把共用體變數作為函式引數,也不能使函式帶回共用體變數,但可以使用指向共用體變數的指標。c99允許共用體變數作為函式引數。 ——c程式設計(第四版)譚浩強

16樓:clever旋旋

注意區分共用體變數和共用體變數成員!

17樓:

這有什麼不可以的,書上說錯了。

函式可以返回一個共用體變數嗎?為什麼?解釋清楚點

18樓:匿名使用者

書上說不可以,我質疑了,我自己試了下,下面**是正確的,我在vc++6.0和cfree5.0執行都是正確,沒有出現任何錯誤!!1

#include

union data

a;union data f1(int n)union data f1(union data d)int main()

19樓:衣以鬆紫美

不能把共用體變數作為函式引數,也不能使函式帶回共用體變數,但可以使用指向共用體變數的指標

20樓:匿名使用者

如果你說的是c語言的話,可以

可以就是可以,需要什麼解釋

一道C語言共用體程式題,C語言中共用體的一道題

我來解釋解釋吧 main a a.k 7 printf d,d,d n a.c 0 a.c 1 a.k printf d,d,d n a.c 0 a.c 1 a.k 當輸入 7,則 7,1,7 當輸入7,則 7,0,7 其實根本問題就是資料在計算機中的儲存問題。首先共用體是共用記憶體的,即共用體中每...

c語言共用體我打問號的那句為什麼把97用浮點形

因為在記憶體中整型和浮點型的儲存方式不一樣。如果想具體指導浮點數的儲存格式請參閱我的一個文件 https 1.float預設就是6位小數 2.小數在記憶體是以指數形式儲存的,講整形97化成浮點型讀取讀取首位,為0 3,除了整數和字元型輸出可以相互轉化,其他的轉化會發生未知的數 網頁連結這裡有答案,但...

關於C語言的問題,函式體

星號 在定義 宣告變數的時候,表示變數是指標。在使用變數時,表示求某個指標指向地址的值。在使用變數時,表示取變數的地址。在宣告 定義變數時,表示變數是引用 在c 裡才有 在你的問題裡,fun的引數列表中,是定義形參,你可以寫fun int a 或者 fun int abc 而在main裡用fun k...