第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

114. 以下程序運行后屏幕輸出為( )。

114. 以下程序運行后屏幕輸出為( )。

C
包小龍蝦 2018-07-27 21:45:24
114. 以下程序運行后屏幕輸出為( )。#include<stdio.h>void f(int i){int a=2;a=i++;printf("%d,",a);}main(){int a=1,c=3;f(c);a=c++;printf("%d",a);}A. 4,3B. 3,3C. 4,5D. 3,5
查看完整描述

3 回答

已采納
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊

啊,看了你的描述,我知道你疑惑的點了。你沒搞清楚一個關(guān)鍵知識點(我在給你的另一個回答鏈接中有提到),那就是“表達(dá)式本身是有值”的!

我用下面的代碼片段舉例子:

void?f(int?i)
{
????int?a?=?2;
????a?=?i++;

第 4 行的?a = i++ 這個賦值是把誰的值賦給 a?? 答案是:是把“i++ 表達(dá)式”的值賦給 a。

注意“i++ 表達(dá)式”和“變量 i”是兩個東西。它們間的關(guān)聯(lián)只不過是:“i++ 表達(dá)式”的值是 i 自增前的值。 當(dāng)然還有一點聯(lián)系,那就是 i++ 表達(dá)式的副作用會使它的操作數(shù)(也就是變量 i)自增。這個副作用何時確定發(fā)生是由所謂的“序列點規(guī)則”控制的。

但是 a = i++; 這條語句并不受自增副作用發(fā)生時機的影響! 因為 a 被賦予的是“i++ 表達(dá)式”的值,不是“變量 i”的值,變量 i 何時自增并沒有任何關(guān)系,“i++ 表達(dá)式”的值已經(jīng)確定是 i 自增前的值了。 所以 a 的值確定是 3。


當(dāng)然,由序列點規(guī)則可知,在執(zhí)行到分號之后,“變量 i”的值肯定自增了,i 的值變?yōu)?4 了。如果你這時 pirintf 打印 i 的話,會打出 4。


總之,你可以看到,對于 a = i++ 這樣簡單的語句來說,副作用和序列點并不會影響 a 所獲得的值。

查看完整回答
1 反對 回復(fù) 2018-08-09
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊

#include<stdio.h>

void?f(int?i)
{
????int?a?=?2;
????a?=?i++;
????printf("%d,",?a);
}

int?main(void)
{
????int?a?=?1,?c?=?3;
????f(c);
????a?=?c++;
????printf("%d",?a);
}

分析下程序執(zhí)行流程吧:

首先,main 函數(shù)中 12 行處定義了 a 和 c ,它們的初值分別是 1 和 3。

然后 13 行處調(diào)用了函數(shù) f,并且傳入 c 作為實參。我們看第 3 行 f 的定義。注意:函數(shù)參數(shù)是“值傳遞”——函數(shù)的形參 i 只是獲得實參 c 的值,在函數(shù)中改變形參 i 的值并不會影響外面的實參(12 行的 c)。

程序執(zhí)行流程轉(zhuǎn)入函數(shù) f 中:

函數(shù) f 中 5 行處定義了 int 型變量 a。注意:函數(shù)有自己的作用域,這個 a 和函數(shù) f 外面 main 中 12 行的那個 a 沒有任何關(guān)系,僅僅是名字相同而已!

i++ 表達(dá)式的值就是 i 自增前的值。那么形參的值是 3,所以 i++ 表達(dá)式的值也是 3,結(jié)果第 6 行的 a = i++ 使得 a 的值變?yōu)?3。

隨后 printf 會打印出 3。

程序執(zhí)行流程自函數(shù) f 中返回 main:

不管剛才 f 函數(shù)中如何改變形參 i,都不會影響實參 c,所以這時 main 中的變量 c 的值還是 3。

然后 a = c++ 同理,會把 3 賦值給 a。

最后 printf 會再打印出一個 3。


上面的解答中我把一些知識點加粗了。

下次發(fā)代碼時最好用發(fā)帖時的格式化工具格式化一下(像我這樣)

另外,如果對于自增表達(dá)式還有疑惑,請參考我在其他問題中的回答:http://idcbgp.cn/qadetail/83948




查看完整回答
1 反對 回復(fù) 2018-07-31
  • 包小龍蝦
    包小龍蝦
    大神我還是不理解那個a = c++;和 a = i++;,本來我也覺得說++在后就先用值再加,但是你也說了++--這方面還存在副作用和序列點問題,所以我覺得不是;是序列點嗎,而a = c++;和 a = i++;后面都有;啊,那不應(yīng)該是在;前副作用要結(jié)束掉,那為什么a不是=4啊
  • 包小龍蝦
    包小龍蝦
    我一直被++--這個問題困擾著,之前看了不少材料有講到說++--有副作用和序列點問題,;是一個序列點,但是這題又是在;前++沒有完成,我很不理解,大神能不能詳細(xì)的給我解釋下這方面的內(nèi)容???拜托了拜托了,實在是不理解啊
  • onemoo
    onemoo
    我好像知道你哪里不明白了,我試著解釋了下
?
onemoo

TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊

B


兩個關(guān)鍵知識點:

  1. 自增表達(dá)式 a++ 的值就是 a 自增之前的值。

  2. 函數(shù)參數(shù)是值傳遞。形參只是獲得實參的值,在函數(shù)中改變形參的值并不會影響到外面的實參。

查看完整回答
1 反對 回復(fù) 2018-07-28
  • 包小龍蝦
    包小龍蝦
    還是不懂,我看不懂這個,可以詳細(xì)解釋下嗎?拜托了大神
  • onemoo
    onemoo
    看來是對一些基礎(chǔ)知識掌握得不夠牢靠,我另寫了一個回答,試著詳細(xì)分析了下程序執(zhí)行流程
  • 包小龍蝦
    包小龍蝦
    謝謝大神
  • 3 回答
  • 0 關(guān)注
  • 1379 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號