真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語(yǔ)言函數(shù)實(shí)參的取值順序 c語(yǔ)言實(shí)參求值順序

C語(yǔ)言,函數(shù)參數(shù)求值順序問(wèn)題,i++,++i問(wèn)題

您好,是這樣的;函數(shù)在傳參時(shí)是先傳右面的,所以導(dǎo)致結(jié)果為0;

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到新樂(lè)網(wǎng)站設(shè)計(jì)與新樂(lè)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋新樂(lè)地區(qū)。

如果改為p = f ( ++i, i ); 結(jié)果就不同了;請(qǐng)采納

關(guān)于C語(yǔ)言的參數(shù)傳遞順序……

樓主您好,首先您要理解一下i++的行為,即先用i,然后再++,所以,傳遞參數(shù)時(shí)先用i=1的值,用完了然后++,即先用x=y=1=i,然后i=2;我把程序給您改一下,你就會(huì)根據(jù)結(jié)果看的很明白了。

#include

stdio.h

int

f(int

x,int

y)

{

printf("x=%d\n",x);//顯示傳遞過(guò)來(lái)的i值

printf("y=%d\n",y);

//顯示傳遞過(guò)來(lái)的i++值

if(xy)

return

1;

else

if(xy)

return

-1;

else

return

0;

}

int

main()

{

int

i=1;

int

k;

k=f(i,i++);

printf("i=%d\n",i);//顯示執(zhí)行完函數(shù)后i的值

printf("k=%d\n",k);

return

0;

}

結(jié)果:x=1

y=1

i=2

k=0

樓主您的部分理解是對(duì)的,而結(jié)果有時(shí)候跟編譯器有關(guān),它的編譯順序是不一樣的。

f(++i,i)

和f(i,++i)運(yùn)行結(jié)果都與理解一致,

f(i++,i)

和f(i,i++)運(yùn)行結(jié)果與理解不一致;++是一種縮寫(xiě),對(duì)于y=i++,就是y=i,然后i=i+1;對(duì)于y=++i,就是i=i+1,然后y=i.

C語(yǔ)言實(shí)參求值順序。。。

樓主fun(m+3,m++);與fun(m+3,++m);都是所謂“實(shí)現(xiàn)未定義的”

關(guān)于實(shí)現(xiàn)未定義,請(qǐng)參看我的另一篇回答:

本例中涉及函數(shù)調(diào)用前的參數(shù)求值順序,ANSI C又有規(guī)定:函數(shù)參數(shù)求值順序是不確定的,編譯器制造者可以隨意實(shí)現(xiàn)。大多數(shù)主流編譯器求值順序都是從右向左。你所使用的編譯器對(duì)這兩例語(yǔ)句輸出的結(jié)果表明它是從右向左求的。

fun(m+3,m++);中先求得m++,它返回m后編譯器有兩種選擇:一種先求得m+3再m自增,一種先自增再求得m+3。遺憾的是,這也是未定義的,編譯器可以隨意做出選擇。你的編譯器選擇了前者,得到的結(jié)果是8,5。

對(duì)后一個(gè)調(diào)用應(yīng)該是沒(méi)什么疑惑了。注意,疑惑都是產(chǎn)生于x++,像++x這種代碼是明明白白的。所以盡量不要在復(fù)雜表達(dá)式中用后置自增自減

c語(yǔ)言 調(diào)用函數(shù)是實(shí)參是計(jì)算好再賦值給形參還是把實(shí)參的數(shù)直接賦值給形參

函數(shù)的參數(shù)調(diào)用和傳遞是這樣的:

調(diào)用子程序或函數(shù)

參數(shù)順序(一般是倒序)壓入堆棧:如果是數(shù)據(jù),直接壓棧;如果是表達(dá)式,求取其值后將值壓棧;變量則將其值取出壓棧

進(jìn)入子程序,子程序分配存放在堆棧中的各數(shù)據(jù)以臨時(shí)變量名,這些變量名就是函數(shù)頭部的參數(shù)名,子程序中用這些臨時(shí)變量名進(jìn)行運(yùn)算

如果函數(shù)有返回值,返回時(shí)需要提供一個(gè)返回值,存放在指定位置(一般是個(gè)通用寄存器),然后丟棄堆棧中的數(shù)據(jù)(包括調(diào)用時(shí)壓棧的那些參數(shù)),返回調(diào)用者調(diào)用位置之后繼續(xù)運(yùn)行

c語(yǔ)言,實(shí)參的求值順序?yàn)閺挠抑磷螅?/h2>

正常應(yīng)該是從左到右的,我的機(jī)器上運(yùn)行結(jié)果是2,3,3。

可能有些編譯器比較特別從右到左也是有可能的,但是我見(jiàn)過(guò)的編譯器都是從左到右的。

c語(yǔ)言參數(shù)求值順序

當(dāng)實(shí)參列表包括多個(gè)實(shí)參時(shí),對(duì)實(shí)參的求值順序是不確定的,

有的系統(tǒng)按自左至右順序求實(shí)值,

有的系統(tǒng)則安自右至左的順序。

許多C版本(如turbo

c

和ms

c)是自右而左的順序求值

(見(jiàn)譚浩強(qiáng)C語(yǔ)言程序第二版p150)

故上述程序先算i++,

第二個(gè)參數(shù)的值為i=2之后i的值變?yōu)?,

再將i代入第一個(gè)參數(shù),

故兩個(gè)參數(shù)的值分別為3,2,所以計(jì)算結(jié)果為1


新聞標(biāo)題:c語(yǔ)言函數(shù)實(shí)參的取值順序 c語(yǔ)言實(shí)參求值順序
文章轉(zhuǎn)載:http://weahome.cn/article/dooggsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部