C語言中,結果為什麼是0呢。我以為是4呢,我看不出來。。謝謝,幫解決一下

時間 2021-10-17 04:57:59

1樓:匿名使用者

union體是看最後一次存進去的資料,與裡面具體的那個變數無關的。

變數a的最後一次賦值是0,所以結果也是0。

2樓:

#include

int main(void)

union myunu;

int k;

}a;a.u.x=4;

a.u.y=5;

a.u.z=6;

a.k=0;

printf("%d\n",sizeof(a));

printf("%d\n",a.u.x);

printf("address x=%p\n",&a.u.x);

printf("address y=%p\n",&a.u.y);

printf("address z=%p\n",&a.u.z);

printf("address k=%p\n",&a.k);

return 0;

可見,x,y,z,k每個佔4位元組,x和k,共用同一個地址,這是union的特性

3樓:匿名使用者

這裡結構體四位元組對齊,第一個元素,就是x和k是同一個記憶體空間。所以改了k就相當於改了x。

int *p=(int *)&a+1;

*p=0;

這樣就修改了y的值

同理int *p=(int *)&a+1;

*p=0;

這樣就修改了z的值

記憶體佈局你就明白了

4樓:程式猿3號

http://visionsky.blog.51cto.com/733317/151760,這個可以幫助你

“聯合”與“結構”有一些相似之處。但兩者有本質上的不同。在結構中各成員有各自的記憶體空間, 一個結構變數的總長度是各成員長度之和(空結構除外,同時不考慮邊界調整)。

而在“聯合”中,各成員共享一段記憶體空間, 一個聯合變數的長度等於各成員中最長的長度。應該說明的是, 這裡所謂的共享不是指把多個成員同時裝入一個聯合變數內, 而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值, 賦入新值則衝去舊值。

下面舉一個例了來加對深聯合的理解。

例4:#include

void main()

half;

}num;

num.i=0x4241; /*聯合成員賦值*/

printf("%c%c\n", num.half.first, num.half.second);

num.half.first='a'; /*聯合中結構成員賦值*/

num.half.second='b';

printf("%x\n", num.i);

getchar();

}輸出結果為:

ab 6261

從上例結果可以看出: 當給i賦值後, 其低八位也就是first和second的值; 當給first和second賦字元後, 這兩個字元的ascii碼也將作為i 的低八位和高八位。

5樓:偉創

因為a.k和a.u.x在記憶體中佔用相同的地址空間

你要不看看a.u.y和a.

u.z是什麼,聯合體在記憶體中佔用的空間是以union中需要記憶體最大的變數為準的,你的程式中a需要3個int的空間(一個結構體),所以你看a.k的話,因為a.

k是最後寫進去的,而且和a.u.x一樣是int型,並且在記憶體中佔用相同的地址空間,所以讀出來資料是相同的

6樓:

因為union體是共享記憶體的,後一次的賦值會將前面的賦值覆蓋掉

7樓:匿名使用者

聯合體共享記憶體 a.k=0;已經修改了x的值。去掉就ok了

8樓:

聯合(共用體)是後進先出

c語言,為什麼最後結果是7呢。。我看不出來

9樓:祥

define 是原樣替換的 遇到f(x)就替換程x*x 也是說 k=f(1+2)/f(2+1)替換後為1+2*1+2/2+1*2+1=7,所以是7 不要人為加括號!

10樓:豆小筆

k=f(1+2)/f(2+1);

f(1+2)中x為1+2

f(2+1)中x為2+1

#define f(x) x*x這為替換,你把對應的x替換數字就出來了

f(1+2) 1+2*1+2

f(2+1) 2+1*2+1

f(1+2)/f(2+1);

1+2*1+2/2+1*2+1

這是赤裸裸的替換,f(3)不等於f(1+2)有點類似與字串的型別

11樓:匿名使用者

define的語句只會替換。

如果你上面所寫。

k=f(1+2)/f(2+1),編譯的時候會替換成k=1+2*1+2/2+1*2+1;這樣就等於7;

你如果要讓他正確執行。你應該這樣define;

#define f(x) (x)*(x)

這樣就不會出錯了。

12樓:

如果不加括號,表示式就會被,因此上面會被成k=1+2*1+2/2+1*2+1,因此是7,所以要注意定義巨集的時候要給變數加括號

13樓:匿名使用者

你定義f(x) 為x * x, 你的k=f(1+2)/f(2+1), 相當於x=1+2,但是x * x並沒有用括號所以變成了

1+2*1+2/2+1*2+1=7,系統不會自動幫你識別並加括號。

14樓:

用x*x把f(1+2)/f(2+1)是:k = 1+2*1+2/2+1*2+1 ;算算是多少就ok了

15樓:

f(x)是帶引數的巨集,只做簡單的替換,不自動進行算術運算。

16樓:匿名使用者

int main()

看看這就知道了。巨集定義記得加括號,得小心用。

在c語言中,為什麼1/2的運算結果為0;1.0/2.0的結果為0.5謝謝了,大神幫忙啊

17樓:白諾大好人

因為除號兩邊都是整數,1/2的結構是0.5,取整數以後就是0 第二個是因為除數與被除數有一個是小數結果不會取整數,就是0.5

18樓:久野杏子

1和2是整型,1/2也是整型,0.5取整為0; 1.0和2.0是浮點型,所以1.0/2.0也是浮點型,等於0.5

19樓:景愉玉幼霜

輸出*#pq

下面為程式,偽碼為解釋

void

main()

case

2://由於case

1沒有break,故繼續case

2switch(z)

//即switch(3)

}switch(k)

//即switch(1)}

求下列c語言程式的正確執行結果 為什麼結果兩行都是0 2 4...18,不應該第一行012345

20樓:小豬佩熊

你的**寫的好雞兒差啊,不知道你用的什麼編譯器,標頭檔案沒有加,然後全域性變數什麼的一點不懂。我給你稍微改了一下。你看看

#define max 10

#include

int a[max],i;

void sub1();

void sub2();

void sub3();

int main()

void sub2()

}void sub1()

void sub3()

21樓:老猴子不會胖

第一 sub1 sub2沒有執行任何操作,因為沒有實參形參,應該和sub3一樣有引數才對。

第二 sub3的引數也有錯誤,max作為裡面的一個引數,沒有值!你意思應該是將max 10這個值傳給它,但是形參裡沒有,無法傳遞

c語言 下面程式執行結果為什麼是0 而不是1 main() {int n[5]={0,0,0},

22樓:與子如初見

因為迴圈的時候當i等於k的時候退出迴圈了,根本沒有執行迴圈體n[i] = n[i]+1;這一句,所以n[k]的值為初始化的值,初始化的值為0.故輸出0,。

23樓:匿名使用者

因為當i=k時,for迴圈的條件已經不滿足,不會執行n[i]=n[i]+1。故n[k]還是0.

24樓:殷明明孫楓

選cn=4;

相當於是這樣

intn=0;

while(n++<=2)

//先進行

n<=2判斷,再進行n++自增運算。n=3的時候,n>2,但還是會進行++自增運算,所以為回4

printf("%d",n);

c語言如何計算除法,保留兩位小數。下邊程式的結果為什麼是 0.00

25樓:幻翼高達

需要準備的材料分別有:電腦、c語言編譯器。

1、首先,開啟c語言編譯器,新建一個初始.cpp檔案,例如:test.cpp。

2、在test.cpp檔案中,調整c語言**:double c;c=1.0 * a/b;。

3、編譯器執行test.cpp檔案,此時成功將除法保留2位整數輸出。

26樓:匿名使用者

c語言做除法,只需要使用標準c的語法即可,各個作業系統均為提供浮點運算的,一般cpu上也都會有單獨的浮點運算單元(為了提高效率),顯示0.00只不過是列印函式的格式化輸出而已(你使用了.2f,說明打兩位浮點數)

27樓:匿名使用者

你的c要定義成float 才行還有就是這樣 c = 1.0*a/b

28樓:匿名使用者

printf("c=%.2d\n",c);

29樓:

把c定義成float或者double型就對了

30樓:匿名使用者

整型除法中,a/b,如果a

31樓:尋風

你定義的是整形,c=a/b;結果是c=0;

32樓:無情有義

把int a,b,c換成float a,b,c

33樓:匿名使用者

1, int a,b,c; 改為 float a,b,c;

c語言中,這道題的輸出結果為什麼是70呢

x string x 所以sizeof x 7 因為strlen 以判斷到 0 也就是0 作為字串結尾標識,所以x 0 0,導致strlen在判斷x 0 時就認為到字串末尾了,因此返回0 d d 列印出來就是 70 阿爾邁凡 sizeof是求變數戰勝記憶體大小的 char x string 記憶體中...

C語言中的0與0有什麼區別,c語言中“!0”和“!!0”是什麼意思?

蒼飛陽帛蒼 型別不一樣 0是整形 用 d輸入輸出 0 是字元型 用 c輸入輸出 再應用的時候具體運算也不一樣 例如十進位制運算a 10 0 10 自負運算的話b 0 10 58 按 0 的ascii碼值48計算 包昊碩紅藝 在c語言中,0和 0 的區別,有很多.儲存空間方面,整數0可以佔,2位元組 ...

c語言中的0xf代表什麼,C語言中0xFFFF表示什麼

張老師情感分析 c語言中對變數賦值0x是以十六進位制數作為變數的值進行運算的。一般用來表示記憶體地址的。舉例說明 定義x int x 0x23 這句話的意思跟定義成int x 35一樣的。編譯器在接收到0x23時就把它當做十六進位制數來處理。簡單來說,表示0x後面的值為十六進位制。擴充套件資料 1 ...