8 回答

TA貢獻2051條經驗 獲得超10個贊
幫你格式化:
include <stdio.h>
main()
{
int i=2,j=3,k;
k=i+j;
{ //這里突然出現的大括號是什么意思?
int k=8;
if(i=3)
printf(“%d”,k);
else
printf(“%d”,j);
}
printf(“%d%d”,i,k);
}
如果誰故意寫成這樣,那就是找抽型。if(i=3)肯定是true,因為i是正數,所以輸出了8,最后那個print的時候k又變成了5了,因為這個兩個k的作用域不一樣,那個大括號里面的k的作用域僅限于大括號里面。
以上回答是我腦補的,在下并不熟悉C語言

TA貢獻1876條經驗 獲得超6個贊
@怡紅公子0526:
如果誰故意寫成這樣,那就是找抽型。if(i=3)肯定是true,因為i是正數,所以輸出了8,最后那個print的時候k又變成了5了,因為這個兩個k的作用域不一樣,那個大括號里面的k的作用域僅限于大括號里面。
以上回答是我腦補的,在下并不熟悉C語言

TA貢獻1846條經驗 獲得超7個贊
i
變了是因為 if(i=3)
這個語句是 把 i
的值賦值為3,再判斷i
是否為正數
k
沒變是因為樓上所說,k的作用域不一樣。大括號里和大括號外的是兩個k,所以括號外的k 不變。

TA貢獻1828條經驗 獲得超4個贊
此處的大括號代表這里新開辟了一個作用域。在括號內重新定義的k,只在這個作用域內起作用,在這個括號中作用域外部的k的優(yōu)先級是沒有這個內部定義的k高的。舉個形象的比喻,在這個小城鎮(zhèn)(作用域內),我(作用域內的k)才是老大!但是出了這個小城鎮(zhèn)(作用域外部),你(作用域外的k)就是老大了!
至于i=3,這是一條賦值語句,顯然是成立的,必定為ture。在此需要注意的是,i并沒有重新定義,只是給作用域外定義的i重新賦值,這個i,還是作用域外的i。
第一個printf輸出的是作用域內的k,值為8。第二個printf輸出的是作用域外的i和k,值為3和5。
目測這是一道c語言類似于國家二級計算機考試的題目。純屬是為了考你對細節(jié)的理解而出的,正兒八經寫程序不會像他這樣寫的,這樣寫的代碼非常糟糕。
- 8 回答
- 0 關注
- 730 瀏覽
添加回答
舉報