1樓:匿名使用者
#include
int f1(int *x,int *y,int z);
int main(void )
int f1(int *x,int *y,int z)請給出分析過程。
所以最後輸出為4 5 5 4
這裡需要注意,函式呼叫時,是將a,b的地址呼叫,所以子函式中的變化就是a,b的變化。
而c的呼叫只是將c的值賦給了z,z在這裡是個子函式區域性變數,z在子函式返回時記憶體被釋放,其改變不會造成c的變化。
2樓:風天雪月
我的表達可能不是特別好 僅作參考用
簡單來說就是 函式指標(形參,實參)和++ --的問題這裡 首先 函式呼叫了兩個地址變數 形參 int *x,int *y,這個意思是傳遞地址變數過去,這個可以看成引用的操作 就是對目標(這個地址的變數)的操作,其實就是形參與這個目標共享同一儲存單元
然後++ --的問題就好懂點了。。(個人理解) ++放在變數後面 可以看做先處理完這個語句再變數自己+1,可以看做*x=*y;*y+=1;然後a先等於b的值4 然後b再自己+1等於5 --則是先自減再執行語句 d=c-1就是4,但是這裡的z是形參,不影響實參c 所以答案是4554
c語言題目結果為什麼是4 5 5 4,題目見詳細說明
3樓:風天雪月
我的表達可能不是特別好 僅作參考用
簡單來說就是 函式指標(形參,實參)和++ --的問題這裡 首先 函式呼叫了兩個地址變數 形參 int *x,int *y,這個意思是傳遞地址變數過去,這個可以看成引用的操作 就是對目標(這個地址的變數)的操作,其實就是形參與這個目標共享同一儲存單元
然後++ --的問題就好懂點了。。(個人理解) ++放在變數後面 可以看做先處理完這個語句再變數自己+1,可以看做*x=*y;*y+=1;然後a先等於b的值4 然後b再自己+1等於5 --則是先自減再執行語句 d=c-1就是4,但是這裡的z是形參,不影響實參c 所以答案是4554
c語言題,為什麼結果是5,4,-5
4樓:匿名使用者
一個語句裡帶有多個 ++,--都是耍流氓,都是不推薦的**。
常用的 cdecl , stdcall都是從右往左壓棧,也就是說對於函式引數會從右往左一個一個計算值:
printf("......", ++x, --x, -x)因此會首先 計算 -x , 得到 -5 壓入堆疊,第四個引數是 -5再計算 --x, 字首--, 先自減x, 再求值,因此 x 變成 4, 表示式的值也是4, 壓入第三個引數,
再計算 ++x, 字首++, 先自增x, 再求值,因此 x 變成 5, 表示式的值也是5, 壓入第二個引數,
因此 三個引數分別是 5, 4, -5
c語言中 4&&5的值為什麼是1 4&5的值是多少 邏輯與和按位與有什麼區別
5樓:匿名使用者
4&&5的值為1.這裡的1是表示真。因為4和5都是非0值。非0即為真。真真得真。所以結果為1
4&5的值為4。這裡4的二進位制是「100」,5的二進位制是「101」 按位與就是100&101=100(即十進位制為4);
6樓:匿名使用者
&&是邏輯與
false && false = falsefalse && true = falsetrue && false = falsetrue && true = true
&是位與
先將數看成2進位制的,然後按照上面的邏輯與的規則,對每一位進行邏輯與比如4 = 100
5 = 101
4 & 5 = (100)&(101)
1 0 0
1 0 1
-----------------
= 1 0 0
4 & 5 = (100)&(101) = (100) = 4
c語言,為什麼結果是1 3 4 5
7樓:楊兵
答案我執行過了,是 1 3 4 5,現在我來解釋一下,希望我的解釋你能夠理解:
首先int a[5]=;
(1)注意到c/c++語言規定是a[0]=1,a[1]=4,a[2]=5;
而不是a[1]=1,a[2]=4,a[3]=5;
(2)經過
while (i<=n&&k>=a[i])
i++;
由於a[i]即a[1]=4,而k=3不大於a[1],不滿足迴圈條件,不執行i++語句
故經過while之後,i 不變,仍未1;
(3)for (j=n-1;j>=i;j--)
a [j+1]=a[j];
當j =n-1即j=2時,將(a[j]即a[2])的值5賦值給(a[j+1]即a[3]),此時a[5]=;
當 j=1時,將(a[j]即a[1])的值4賦值給(a[j+1]即a[2]),此時a[5]=;
(4)a[i]=k;
即將k的值3賦值給a[i]即a[1],得a[1]=3,此時a[5]=
(5)for (i=0;i<=n;i++)
printf ("%3d",a[i]);
輸出a[5]所有的值,即1,3,4,5
8樓:劉_永友
你嘗試著一步一步的 自己試著 想象 執行過程
i n j k a[0] a[1] a[2] a[3] a[4]
1 3 null 3 1 4 5 0 0
while語句進入 由於 k>=a[1] 不成立 所以 跳出
for語句 初始化 j = 2
第一次 1 3 1 3 1 4 5 5 0
第二次 1 3 0 3 1 4 4 5 0
由於 0<1 跳出
下一語句 a[i]=k; 執行 即使 a[1] = 3;
執行 列印語句 到 a[3] 所以就是 1 3 4 5了 你要注意 格式 我估計你這個是 把迴圈的格式
弄錯了 造成了邏輯 錯誤 …… 按照題目要求 慢慢改吧 迴圈體 建議 加一個 括號……
9樓:匿名使用者
a[0]=1,a[1]=4,a[2]=5;
while (i<=n&&k>=a[i])後i 不變,仍未1;
c語言迴圈結構為什麼輸出結果是,c語言迴圈結構為什麼輸出結果是
輸入 hello 之後有回車的吧,這個是 n 貢獻給other 輸入 12345 之後也有回車的,這個是 n 貢獻給other 輸入 之後,本身貢獻給other有4個 也有回車的,這個是 n 貢獻給other 輸入 之後也有回車的,但是因為首先 共享給other一個之後,while迴圈結束了,n 作...
在C語言中11結果是,c語言中,為什麼b11最終得出b
在c或c 中 是與的操作符,只要操作符兩邊都為真 不為0就為真 結果就為真。因為 1的二進位制碼 1的二進位制位全為1 不是0,所以兩個條件都為真,結果就為真。前面有人寫出了執行結果,可以看出,c或c 是用1來表示真的 所以結果就為1了 是 1 include int main include us...
請教這段C語言程式輸出結果為什麼是1023沒有
靜態全域性變數初值是0。所以arr初值是0。最後輸出迴圈是10次,包含10個陣列元素1111000000對於迴圈巢狀邏輯,要是理不清,在原程式迴圈的地方加printf語句把對於的一些變數列印處理會更清晰。比如我下面把原碼新增了printf。include int change int n,int s...