日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++之函数参数按引用传递

發布時間:2025/5/22 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++之函数参数按引用传递 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++引用與指針的比較

引用是C++中的概念,初學者容易把引用和指針混淆一起。

一下程序中,n是m的一個引用(reference),m是被引用物(referent)。

?int m;

?int &n = m;

n相當于m的別名(綽號),對n的任何操作就是對m的操作。

所以n既不是m的拷貝,也不是指向m的指針,其實n就是m它自己。

l???引用的規則:

(1)引用被創建的同時必須被初始化(指針則可以在任何時候被初始化)。

(2)不能有NULL引用,引用必須與合法的存儲單元關聯(指針則可以是NULL)。

(3)一旦引用被初始化,就不能改變引用的關系(指針則可以隨時改變所指的對象),這里指不能再綁定其他的對象,只要不是const,就可以改變值,即可以通過引用改變綁定對象的值,因為它們其實是相同的。

以下示例程序中,k被初始化為i的引用。語句k = j并不能將k修改成為j的引用,只是把k的值改變成為6。由于k是i的引用,所以i的值也變成了6。

?int i = 5;

?int j = 6;

?int &k = i;

?k = j; // k和i的值都變成了6;

引用的主要功能是傳遞函數的參數和返回值。


內聯函數是代碼被插入到調用者代碼處的函數。如同 #define 宏,內聯函數通過避免被調用的開銷來提高執行效率,尤其是它能夠通過調用(“過程化集成”)被編譯器優化。
????內聯函數和宏很類似,而區別在于,宏是由預處理器對宏進行替代,而內聯函數是通過編譯器控制來實現的。而且內聯函數是真正的函數,只是在 需要用到的時候,內聯函數像宏一樣的展開,所以取消了函數的參數壓棧,減少了調用的開銷。你可以象調用函數一樣來調用內聯函數,而不必擔心會產生于處理宏 的一些問題。


#include <iostream>

using namespace std;



void swap(int &i, int &j){

????i^=j;
????j=i^j;
????i=i^j;
????cout<<"the call function: "<<i<<"\t"<<j<<endl;

}
void print( const int &l){//如果形參是const,實參both。如果實參const,說明實參不能被改動,則形參必須const。

????cout<<"l= "<<l<<endl;

}
void main(){

????int i=3,j=5;
????swap(i,j);
????const int k=6;//定義的同時必須初始化,const int k;k=6;報錯
????int &m=i;//引用定義的同時必須初始化,而且要關聯到某一類型。int??&m=3報錯
????double b=3.0;
????double &a=b;
????//cout<<sizeof(a)<<endl;//引用的sizeof指向其綁定的對象的大小
????char *r;
????//cout<<sizeof(r)<<endl;//指針都是4個字節

????float array[12];
????cout<<sizeof(array)<<endl;//數組的sizeof就是本身類型占用字節數*個數

????//error :&m=j;引用一旦初始化后不可再綁定其他對象
????double n=1.2;
????const int &t=n;//const類型的引用可以綁定到其他類型,而非const類型的引用不可以。。。
//????print(k);
//????cout<<"the main function: "<<i<<"\t"<<j<<endl;
//????cout<<"k= "<<k<<endl;
}
//總結:一般變量想被外部文件使用,直接在引用的地方加上extern就ok了。const變量不行,如果想外部引用,初始化的地方加extern,引用的地方也要加



?

本節主要講函數調用及參數傳遞的一些問題。

首先說參數調用,參數調用做了2件事情,用對應的實參初始化函數的形參,并將控制權轉移給被調用函數,主調函數的執行被掛起,被調函數開始執行。函數的運行以形參的隱式定義和初始化開始。執行到return的時候,被調函數完成,主調函數在調用處開始恢復執行,并將函數的返回值用作求解調用操作符的結果,繼續處理在執行調用的語句中的剩余工作。

?

參數傳遞

第一種傳遞方式:值傳遞

值傳遞需要復制對應的實參實現初始化,當用實參副本初始化形參時,函數并沒有訪問調用函數所傳遞的實參本身,對實參副本的修改也是局部的,函數調用結束就結束了,因此不會修改實參的值。

引用傳遞:

因為復制實參并不是在所有的情況下都適合,不適合復制實參的情況包括:

當需要在函數中修改實參的值時;

當需要以大型對象作為實參傳遞時,對實際的應用而言,復制對象所付出的時間和存儲空間代價往往過大

當沒有辦法實現對象的復制時

?

引用形參直接關聯到綁定的對象而非對象的副本,必須使用與該引用綁定的對象初始化該引用。引用形參完全以相同的模式工作。在c語言中,人們習慣用指針,在c++中使用引用。

?

使用引用形參返回額外的信息。這個跟上面有些類似,只不過說如果你想要多返回些東西,但是直接又沒法返回,那么就借助引用好了,通過引用改變改變實參的值。

?

利用const引用避免復制。這個主要是大型對象的時候,復制代價比較高。比如string。。。

很多時候如果不需要改變值,就加上 const

double fl=1.2;
const double *pl=&fl;//這個是正確的,賦值初始化
*pl=4.3;//error:因為已經是const類型的了,不允許改變值,不過指針pl還是可以指向其他對象的。

double *cosnt plt;這個時候plt是不能更改的。。。

string.h是c語言對應的標準庫,在c++里面對應的是<cstring>

總結

以上是生活随笔為你收集整理的C++之函数参数按引用传递的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青春草在线视频免费观看 | 国产综合婷婷 | 黄色片免费视频 | 蜜桃臀aⅴ精品一区二区三区 | 93久久精品日日躁夜夜躁欧美 | www网站在线免费观看 | 中文字字幕码一二三区 | 这里只有久久精品 | 成人瑟瑟 | 天天精品 | 欧美一级免费视频 | 怡红院国产 | 成人福利午夜 | 日韩精品在线免费看 | 久久精品视频免费 | 国产精品无码一区二区桃花视频 | 呦呦av | 伊人狼人综合 | www日本www | 色天天干| 五月天丁香社区 | 久久精品色妇熟妇丰满人妻 | 男人懂的网站 | 亚洲第一免费播放区 | 亚洲欧洲在线播放 | 日韩欧美一区二区三区免费观看 | 国产视频欧美视频 | 欧美精品日韩在线 | 人人澡超碰碰 | www.白丝 | 操处女逼视频 | 日韩精品第一 | 日韩中文字幕免费在线观看 | 国产精品美女在线观看 | 亚洲一区视频在线播放 | 国产乱码精品一区二区 | 在线免费观看黄色av | 最新中文字幕免费视频 | 亚洲jizzjizz日本少妇 | 色妞av | 麻豆精品国产精华精华液好用吗 | 91美女诱惑 | 日韩黄大片 | 国产成人精品一区二区在线小狼 | 人人澡人人草 | 综合一区二区三区 | 欧美一级黑人 | 狠狠躁日日躁夜夜躁2022麻豆 | 中文字幕在线视频网 | 中文字幕在线看片 | 精品一区二区三区人妻 | 天天色综合av | 伊人动漫 | 色屁屁影院www国产高清麻豆 | 美乳人妻一区二区三区 | 色婷婷激情五月 | 国精产品一区二区三区 | 一区二区三区国产精品视频 | 99在线视频免费观看 | 久久久久爱 | 久久精品福利视频 | 中文字幕视频网 | 国产精品久久久久久久无码 | 成人免费视频软件网站 | a在线视频 | 先锋影音一区二区三区 | 综合色爱 | 一区二区三区伦理 | 无码人妻一区二区三区精品视频 | 中文字字幕| 非洲黑人狂躁日本妞 | 人人射av| 激情戏网站 | 裸体视频软件 | 国产精品伦一区二区三级视频 | av每日更新在线观看 | 日韩成人一区二区视频 | 在线看一区二区 | 欧美大片xxx| 亚洲 欧美 国产 另类 | 91综合精品 | 午夜伦理福利视频 | 成年人毛片视频 | 欧美人与性禽动交精品 | 免费在线观看黄网站 | 日本三级播放 | 日韩欧美二区三区 | 国产区在线视频 | 五月婷网站 | 欧美一区二区日韩 | 日本丰满肉感bbwbbwbbw | 亚洲夜夜操 | 日韩黄色大全 | 国产剧情一区在线 | 亚洲三级大片 | 中文字幕一区二区三区夫目前犯 | 国产情侣在线播放 | 日韩伊人网 | xxxxx69|