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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转载】C ++ 基础 指针 引用

發布時間:2025/3/13 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】C ++ 基础 指针 引用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎不扎實 >_<!

C++中傳值參數和引用參數怎樣區別呢?

看以下例子:
#include<iostream>
using namespace std;
void swap(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;
swap(a,b);
cout<<"after??‘swap’:a="<<a<<",b="<<b<<endl;
}
這個例子是傳值調用, 意思就是 形參 的 改變不會影響 實參的值。
你運行一下可知 主函數調用了swap函數后 a,b的值并沒有發生交換。
原因是,調用swap函數時 編譯器為 swap(int a,int b) 中的形參 a , b單獨分配內存空間,并接受主函數傳遞來的值,這塊內存空間和 main()函數中的 a ,b 不是同一內存空間。 所以在swap(int a,int b) 中 a , b發生了交換,但main函數中a , b沒發生交換。即主調函數與被調函數的操作對象各不相同,參數僅在調用時由實參向形參傳遞,而不可由形參向實參傳遞。

要使a ,b發生交換 需要使用傳址調用。程序改為如下:
#include<iostream>
using namespace std;
void swap(int?&?a,int?&b)
{
int temp;
temp=a;
a=b;
b=temp;
cout<<"in ‘swap’:a="<<a<<",b="<<b<<endl;
}
??main()
{
int a=3,b=5;
cout<< "before ‘swap’:a="<<a<<",b="<<b<<endl;

swap(a,b);
cout<<"after??‘swap’:a="<<a<<",b="<<b<<endl;
}

引用可以看作是一個變量的別名,使用 引用 時 ,對于void swap(int a,int b)???編譯器并沒有給形參a,b分配新的內存空間,只是使形參a,b指向了main函數中實參a,b的內存空間,他們共享同一內空間,即把地址給了形參。所以在void swap(int a,int b)函數中對這塊內存的改變也就改變了實參的值。
除了使用引用,也可以使用指針。

指針方式和引用方式都屬于傳址調用。那么指針和引用又有什么樣的區別呢?

兩種參數都允許函數修改實參所對應的對象,兩種類型的參數都允許有效得向函數傳遞大型類對象。

兩者在參數傳遞過程中,有如下幾點不同

???(1)引用必須被初始化為指向一個對象,一旦初始化了,它就不能在指向其它對象。指針可以指向一系列不同的對象,當然也可以定義為NULL;

???如:

?calss Type{

???void operation(const Type&p1,const Type&p2);

???int main(){

????Tyoe obj1;

????Type obj2 = operation(obj1,0);????//引用參數的實參不能為0

???}

???所以在函數中,一個參數可能指向不同的對象的情況,或者這個參數可能不指向任何對象,則必須實用指針參數。

???(2)引用參數的一個重要用法,它允許我們在有效實現重載操作符的還能保證用法的直觀性。如下例:

??Matrix operator+(Matrix m1,Matrix m2)

???{

????Matrix result;

????//do computation

????return result;

???}

???通過上面實現后,就能夠支持兩個Matrix對象的加法,如:a+b

???但是這樣做,效率會非常低。因為該實現的實參是按值傳遞,兩個Matrix對象相加的時候,內容被拷貝到operator+()函數的參數區中,因為Matrix對象非常大的時候,分配這樣一個對象,并把它拷貝到函數參數區中的時間和空間開銷比較高。

???而為了提高我們的操作符函數的效率,假定我們決定把參數申明為指針的時候,如下:

?Matrix operator+(Matrix *m1,Matrix *m2)

???{

????Matrix result;

????//do computation

????return result;

???}

???這種做法,在一定程度上很好得解決了函數實現的效率問題,但是帶來一個新的問題是用戶的使用習慣,對于這樣的operator+操作,調用方式變為:&a+&b,這樣大大顛覆了我們傳統的調用方式。

???所以這時候,如果申明為引用的方式,就能到達到效率和使用習慣的目的:

?Matrix operator+(Matrix &m1,Matrix &m2)

???{

????Matrix result;

????//do computation

????return result;

???}

?

?

轉載于:https://www.cnblogs.com/uniquews/archive/2012/02/23/2364388.html

總結

以上是生活随笔為你收集整理的【转载】C ++ 基础 指针 引用的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: www九九热 | 亚洲一区三区 | 亚洲精品av中文字幕在线在线 | 免费看a视频 | 久久久久无码精品 | 久久九精品 | 人妻激情文学 | 五月婷婷狠狠 | 国产精品一区二区三区四区视频 | 国产做爰免费视频观看 | 午夜激情啪啪 | 梦梦电影免费高清在线观看 | 国产a v一区二区三区 | 夜夜久久| 麻豆69xxnxxporn | 日韩欧美在线中文字幕 | 日韩网红少妇无码视频香港 | 狠狠爱网站 | 久久久欧美 | 天天鲁| 国产麻豆电影在线观看 | 有码在线 | 波多野结衣在线一区 | 自拍偷拍第3页 | 色综网 | 三叶草欧洲码在线 | 亚洲精品乱码久久久久久9色 | 无码精品人妻一区二区三区影院 | 四虎黄色影视 | 男同志毛片特黄毛片 | 成人久久在线 | 日韩欧美三级在线观看 | 欧美日韩亚洲二区 | 九九热综合 | 亚洲国产成人精品91久久久 | 日本一区二区三区精品 | 国产精品-色哟哟 | 黄色欧美大片 | 国产精品亚洲lv粉色 | 成人在线视频一区二区三区 | 韩国一级片在线观看 | 99资源站| 婷婷色六月| 色屁屁www影院免费观看入口 | 亚洲综合日韩精品欧美综合区 | 精品av一区二区 | 99精品视频在线观看免费 | 自拍偷拍1| 韩国一区二区三区在线观看 | av网站在线观看不卡 | 天堂av在线电影 | 国产精品播放 | 精品在线免费播放 | 国产亚洲精品女人久久久久久 | 在线不卡国产 | 潘金莲一级淫片a.aaaaa播放 | 4hu最新网址| 白白色免费视频 | 打屁股疼的撕心裂肺的视频 | 日韩少妇高潮抽搐 | 成年免费视频 | 成人免费在线网址 | 精品午夜福利视频 | 欧美成人aaaa | 91传媒在线播放 | 色小姐综合网 | 日批视频免费 | 99热香蕉| 国产午夜大地久久 | 久久密桃 | 欧美日韩一区二区区别是什么 | 欧美日韩久久精品 | 精品777 | 五月天婷婷久久 | 一区二区成人在线观看 | 国产精美视频 | 无码人妻少妇色欲av一区二区 | 色综合久久网 | 精彩视频一区二区三区 | 日本男男激情gay办公室 | 中文字幕三级 | 中文字幕无码乱人伦 | 天天躁狠狠躁 | 国产福利在线 | 久久网免费视频 | 男女免费视频 | 久久精品无码一区二区三区 | 国产日产欧美一区二区三区 | 老妇裸体性猛交视频 | 永久免费看黄网站 | 99re国产精品 | 亚洲色图小说 | 欧美 日韩 国产 在线观看 | 欧美人与禽zoz0性3d | 99综合网 | 亚洲日本综合 | 一区二区视频在线免费观看 | 久久久久久久九九九九 | 欧美最猛性xxxxx(亚洲精品) |