課程
/后端開發(fā)
/C++
/C++遠征之離港篇
函數(shù)的形參一定要是引用么?fun(int &x,int &y)難道不能寫成fun(int x,int y)?引用的好處是什么,小蘿卜頭和羅XX為什么用小蘿卜頭就好,用羅XX就不好?
2018-10-09
源自:C++遠征之離港篇 2-1
正在回答
其實啊,對于函數(shù)參數(shù)的傳遞(也就是實參與形參的結(jié)合),在C語言中,一般是兩種,一種按值傳遞,一種是按指針傳遞,按值傳遞我們熟悉,創(chuàng)建形參,將實參的值賦給他,然后形參參與到函數(shù)運算,但是對于一些需要函數(shù)(比如交換函數(shù))改變傳入的實參的時候(我理解的實參是這樣的,對于按值和按指針,實參就是該變量的值,而形參就是接受該值得變量),按值傳遞不能起作用了,因為他不是操作原數(shù)據(jù)而是他的副本,這時候指針就起作用了,傳入的是地址的拷貝,但是我們依然可以通過拷貝處理原數(shù)據(jù),所以可以完成任務(wù),這時候我們就發(fā)現(xiàn),按值傳遞傳入的數(shù)據(jù)的拷貝,如果是大型結(jié)構(gòu)體,拷貝起來費空間費時間,遠不如一個指針來的容易,這就是有點。再回到C++,他引入了引用的概念,也就出現(xiàn)了按引用傳遞的概念,但是引用本質(zhì)就是指針,從前的C++編譯器遇見引用就是先將其處理為指針再完成編譯,引用是變量a別名,p是指向該變量(比如a)指針,那么*p是不是可以看做a的別名呢,想想,*p其實就是a,那么*p算算是a的引用呢,當然!這就是引用的本質(zhì),引用只不過是指針的簡化而已!以后的類也是用引用,幾乎不用指針,不是不行,而是寫著麻煩,看著難受而已!記住本質(zhì)
小程序魔王
我是這樣理解的,
如果是void fun(int x,int y)其實是找了一個跟羅xx同名的人,但本質(zhì)上不是羅某某,所以形參的羅xx無論做什么事情都不會影響實參羅xx
但是void fun(int &x,int &y)是給了實參羅某某取了別名,叫蘿卜頭,你叫蘿卜頭做什么事情,實質(zhì)上是去叫羅某某做的,所以形參用的是引用的話,形參的數(shù)值的改變肯定會影響到實參的值
這個主要是形參與實參的關(guān)系 。在函數(shù)的參數(shù)列表里的,是形參,它是對實參的一個拷貝, 但是它們不是在內(nèi)在同一個塊。所以對形參的改變不會影響實參的值 。c++可以通過引用,也就是別名來改變, 比如把函數(shù)定義成 void fun(int x,int &y)這樣在函數(shù)里,對第二個參數(shù)做改變,相應(yīng)的實參也會改變,因為它們是同一個。 這就是引用類型的作用。
舉報
C++掃清通往面向?qū)ο蟮淖詈笠坏勒系K,將所有知識點融會貫通
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2018-12-25
其實啊,對于函數(shù)參數(shù)的傳遞(也就是實參與形參的結(jié)合),在C語言中,一般是兩種,一種按值傳遞,一種是按指針傳遞,按值傳遞我們熟悉,創(chuàng)建形參,將實參的值賦給他,然后形參參與到函數(shù)運算,但是對于一些需要函數(shù)(比如交換函數(shù))改變傳入的實參的時候(我理解的實參是這樣的,對于按值和按指針,實參就是該變量的值,而形參就是接受該值得變量),按值傳遞不能起作用了,因為他不是操作原數(shù)據(jù)而是他的副本,這時候指針就起作用了,傳入的是地址的拷貝,但是我們依然可以通過拷貝處理原數(shù)據(jù),所以可以完成任務(wù),這時候我們就發(fā)現(xiàn),按值傳遞傳入的數(shù)據(jù)的拷貝,如果是大型結(jié)構(gòu)體,拷貝起來費空間費時間,遠不如一個指針來的容易,這就是有點。再回到C++,他引入了引用的概念,也就出現(xiàn)了按引用傳遞的概念,但是引用本質(zhì)就是指針,從前的C++編譯器遇見引用就是先將其處理為指針再完成編譯,引用是變量a別名,p是指向該變量(比如a)指針,那么*p是不是可以看做a的別名呢,想想,*p其實就是a,那么*p算算是a的引用呢,當然!這就是引用的本質(zhì),引用只不過是指針的簡化而已!以后的類也是用引用,幾乎不用指針,不是不行,而是寫著麻煩,看著難受而已!記住本質(zhì)
2018-10-29
我是這樣理解的,
如果是void fun(int x,int y)其實是找了一個跟羅xx同名的人,但本質(zhì)上不是羅某某,所以形參的羅xx無論做什么事情都不會影響實參羅xx
但是void fun(int &x,int &y)是給了實參羅某某取了別名,叫蘿卜頭,你叫蘿卜頭做什么事情,實質(zhì)上是去叫羅某某做的,所以形參用的是引用的話,形參的數(shù)值的改變肯定會影響到實參的值
2018-10-09
這個主要是形參與實參的關(guān)系 。
在函數(shù)的參數(shù)列表里的,是形參,它是對實參的一個拷貝, 但是它們不是在內(nèi)在同一個塊。所以對形參的改變不會影響實參的值 。
c++可以通過引用,也就是別名來改變, 比如把函數(shù)定義成 void fun(int x,int &y)
這樣在函數(shù)里,對第二個參數(shù)做改變,相應(yīng)的實參也會改變,因為它們是同一個。 這就是引用類型的作用。