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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

值传递、指针传递、引用传递的区别

發(fā)布時(shí)間:2025/5/22 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 值传递、指针传递、引用传递的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://hi.baidu.com/lewutian/blog/item/16436cfabb8a99d5b58f3158.html

C++中值傳遞、指針傳遞、引用傳遞的總結(jié) 收藏?
1. 值傳遞:形參是實(shí)參的拷貝,改變形參的值并不會(huì)影響外部實(shí)參的值。從被調(diào)用函數(shù)的角度來說,值傳遞是單向的(實(shí)參->形參),參數(shù)的值只能傳入,不能傳出。當(dāng)函數(shù)內(nèi)部需要修改參數(shù),并且不希望這個(gè)改變影響調(diào)用者時(shí),采用值傳遞。

void swap(int a,int b)
{
???? int temp;
???? temp=a;
???? a=b;
???? b=temp;
???? cout<<a<<’ ‘<<b<<’\n’;
}

int main(){
???? int x=1;
??? int y=2;
??? swap(x,y);
??? cout<<x<<’ ‘<<y<<’\n’;
????
??? return 0;
}

用gdb調(diào)試后發(fā)現(xiàn),x,y的地址分別是0xffbef938, 0xffbef934, 值分別是1,2。而形參a,b的地址分別是0xffbef918,0xffbef914, 雖然它們存儲的值和x,y一樣,都是1,2,但是這只是拷貝過來的。swap只交換了a,b,并不會(huì)改變x,y的值。輸出為2,1;1,2

2. 指針傳遞:

void swap(int *a,int *b)
{
???? int temp;
???? temp=*a;
???? *a=*b;
???? *b=temp;
???? cout<<*a<<’ ‘<<*b<<’\n’;
}

int main(){

?? int x=1;
??? int y=2;
??? swap(&x,&y);
??? cout<<x<<’ ‘<<y<<’\n’;

}

輸出結(jié)果是2,1;2,1。實(shí)參x,y, 形參a,b的地址同上,但是a,b的內(nèi)容分別為0xffbef938(x的地址),0xffbef934(y的地址),*a也就是0xffbef938內(nèi)存中存放的內(nèi)容,即x的值1。簡單地說,a是一個(gè)指向外部實(shí)參地址的指針,*a是指針的內(nèi)容,如果改變了*a也必然導(dǎo)致外部實(shí)參的改變。

3. 引用傳遞:

void swap(int &a,int &b)
{
???? int temp;
???? temp=a;
???? a=b;
???? b=temp;
???? cout<<a<<’ ‘<<b<<’\n’;
}

int main(){
????
??? int x=1;
??? int y=2;
??? swap(x,y);
??? cout<<x<<’ ‘<<y<<’\n’;
??? return 0;
}

輸出是2,1;2,1。實(shí)參x,y的地址同上。然而與指針傳遞不同的是,形參a,b的地址也與x,y相同,即0xffbef938, 0xffbef934。這樣一來,交換a,b就相當(dāng)于交換x,y。

指針傳遞和引用傳遞一般適用于:函數(shù)內(nèi)部修改參數(shù)并且希望改動(dòng)影響調(diào)用者。對比值傳遞,指針/引用傳遞可以將改變由形參“傳給”實(shí)參(實(shí)際上就是直接在實(shí)參的內(nèi)存上修改,不像值傳遞將實(shí)參的值拷貝到另外的內(nèi)存地址中才修改)。指針/引用傳遞的另外一種用法是:當(dāng)一個(gè)函數(shù)實(shí)際需要返回多個(gè)值,而只能顯式返回一個(gè)值時(shí),可以將另外需要返回的變量以指針/引用傳遞給函數(shù),這樣在函數(shù)內(nèi)部修改并且返回后,調(diào)用者可以拿到被修改過后的變量,也相當(dāng)于一個(gè)隱式的返回值傳遞吧。

至于指針/引用傳遞的格式,可以參考以下的內(nèi)容:

int x=1;

int *y=&x; //用于指針傳遞,y有自己獨(dú)立的內(nèi)存地址,存儲的內(nèi)容是x的地址,*y是x的值

int &z=x; //用于引用傳遞,可以理解為z就是x,x就是z,只不過名字不一樣

最后再啰嗦一個(gè)例子:

int change1(char* name){
??? name=”alter”;
??? return 1;
}

int change2(char* &name){
??? name=”alter”;
??? return 1;
}

int main(){
??? char* string=”original!”;
??? change1(string);
??? cout<<string<<’\n’;

??? change2(string);
??? cout<<string<<’\n’;

}

結(jié)果:original!;alter。change1是值傳遞,形參name有自己獨(dú)立的內(nèi)存地址,內(nèi)容是拷貝string的內(nèi)容(string的內(nèi)容是”original”的地址),修改后name的內(nèi)容變成了“alter”的地址。change2是引用傳遞,形參name的地址就是string的地址,或者說name就是string


轉(zhuǎn)載于:https://blog.51cto.com/568464209/1721076

總結(jié)

以上是生活随笔為你收集整理的值传递、指针传递、引用传递的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久鲁鲁| 国产夜色精品一区二区av | 欧美成人亚洲 | 亚洲欧洲色图 | 国产精品午夜福利视频234区 | 日韩第六页 | 久久人 | 青娱乐免费在线视频 | av在线操| 久久精彩视频 | 微拍福利一区二区 | 美女扒开尿口来摸 | 光明影院手机版在线观看免费 | 肌肉猛男裸体gay网站免费 | 日韩av手机在线观看 | 宇都宫紫苑在线播放 | 日韩欧美大片 | 51精产品一区一区三区 | 无码视频一区二区三区 | 黄色网址视频在线观看 | 天天视频天天爽 | 成人精品久久久午夜福利 | 动漫精品一区一码二码三码四码 | 亚洲另类图区 | 欧美日韩 一区二区三区 | www.三级.com| 成人熟女一区二区 | 婷婷色av| 日本泡妞xxxx免费视频软件 | 欧美爱爱免费视频 | 久久久久玖玖 | 性――交――性――乱睡觉 | 国产激情综合 | 国产自在线拍 | 日韩免费福利视频 | 伊人一级片 | 亚洲日本香蕉 | 黄色av免费观看 | 人人操日日干 | 激情都市一区二区 | 女同爱爱视频 | 国产露脸无套对白在线播放 | 日本青草视频 | 日韩美女视频在线 | 色偷av| 四虎永久在线精品免费网址 | 91久久久久久久久久久久久 | 天天搞天天| 可以看av| 久久男人网| 精品国精品国产 | 999免费| 中国在线观看片免费 | 国产一区二区麻豆 | 小小姑娘电影大全免费播放 | 精品在线视频一区二区 | 成人免费午夜视频 | 高潮毛片无遮挡免费看 | 久久看视频 | 99精品综合| 成人无高清96免费 | 在线观看日韩一区二区 | 欧美日本中文字幕 | 国产伦精品一区二区三区 | 美脚の诱脚舐め脚 | 久久成人久久 | 99er久久 | 亚洲无线观看 | 黄视频免费观看 | 国产精品揄拍100视频 | 77久久 | 俺去操 | 激情黄色小说网站 | 公侵犯人妻中文字慕一区二区 | 丝袜人妻一区二区 | 在线观看中文字幕亚洲 | 国产精品911 | 一区二区三区少妇 | 超碰在线观看91 | 亚洲深夜在线 | 国产91av在线 | 成人区人妻精品一熟女 | 日本xxxxxxxxx| 色婷婷av国产精品 | 色一区二区三区 | 丁香花高清在线 | 天天做天天爱夜夜爽 | 找av导航 | 国模一区二区 | 久久爱综合 | 日韩不卡的av | 久久伊人精品 | 国产精品视频一区二区三区不卡 | 人人干干人人 | xxxⅹ少妇少妇xxxx | 欧美日韩一区二区在线观看 | 欧美大尺度床戏做爰 | 免费视频污 | 久久精品aaaaaa毛片 |