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...