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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

传值调用 与传地址调用(传引用)

發布時間:2023/12/31 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传值调用 与传地址调用(传引用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉自:http://myturn.blog.hexun.com/15584978_d.html

#include <iostream>

using namespace std ;?

void Swap(int x, int y) ;

int main(void)

{

??????????? int a = 1 ;

??????????? int b = 2 ;

?

??????????? cout << "a = " << a << ", " << "b = " << b << endl ;

?

??????????? Swap(a, b) ;

?

??????????? cout << "a = " << a << ", " << "b = " << b << endl ;

?

??????????? system("pause") ;

??????????? return 0 ;

}

?

一:值傳遞

void Swap(int x, int y)

{

??????????? int temp = x ;

??????????? x = y ;

??????????? y = temp ;

}

?

輸出結果:

a = 1, b = 2

a = 1, b = 2

原因:Swap(int x, int y)函數采用值傳遞的方式,傳入的實參實際上是a和b的副本而非其本身,所以對副本的改變并不會反應到a和b本身上。這個例子很簡單,但是大一最開始學的時候,壓根就不理解,因為那時候對內存的原理和結構不熟悉!!!

?

二:引用傳遞

void Swap(int &x, int &y)

{

??????????? int temp = x ;

??????????? x = y ;

??????????? y = temp ;

}

?

輸出結果:

a = 1, b = 2

a = 2, b = 1

原因:Swap(int x, int y)函數采用引用傳遞的方式,傳入的實參實際上是a和b的引用,對引用的改變會直接反應到a和b本身上。引用是C++引進的語法,是一個很有用的工具吧,實質上就是包裝了指針,簡化程序猿的負擔,理解了指針才能理解引用,我們當然不能只停留在死記硬背上面,當然是要自己畫出數據在內存中的存儲方式。

?

三:指針傳遞

1.? 改變指針本身

void Swap(int *x, int *y)

{

??????????? int *temp = x ;

??????????? x = y ;

??????????? y = temp ;

}

?

調用方法:Swap(&a, &b) ;

?

輸出結果:

a = 1, b = 2

a = 1, b = 2 ?//這里是不是讓你大吃一驚,反正我當時是驚呆了,這個當時還就是今年的4月時候,不過當時真沒有寫過這樣的指針形式,也沒有遇到這樣的情形,這個例子對加深函數的參數傳遞是很有幫助的,也就是說函數傳遞參數都是傳遞的實參的副本,即使是傳遞的指針副本,這個例子里面我們沒有對這個副本指針進行解除引用操作(*)也即間接引用,所以我們是訪問不到實參變量的,這里進行的賦值也只是對指針副本進行的賦值. ?當時真的沒有想這么多哎,只是傻傻的以為指針很好用,能夠操作內存,好酷炫,還以為是很神秘的技術,原來也是傳遞的一個副本.只是C語言提供了對它操作內存的能力。用*操作就可以直接訪問實參變量...要用心(*)啊!!!不得不贊C語言.

原因:Swap(int x, int y)函數采用指針傳遞的方式,傳入的實參實際上是a和b的指針的副本,而且改變的是副本本身而非其間接引用,所以不會影響的指針所指向的值,即a和b本身上。

?

2.? 改變指針的間接引用

?

void Swap(int *x, int *y)

{

??????????? int temp = *x ;

??????????? *x = *y ;

??????????? *y = temp ;

}

?

調用方法:Swap(&a, &b) ;

?

輸出結果:

a = 1, b = 2

a = 2, b = 1

原因:Swap(int x, int y)函數采用指針傳遞的方式,傳入的實參雖然也是a和b的指針的副本,但是改變的是副本的間接引用,無論是指針本身還是其副本,都指向相同的值,所以這個改變會反應到a和b本身

總之,如果想在被調用函數中改變哪個變量的值就需要把那個變量的地址傳給被調用函數,這樣在被調用函數中通過地址就可以訪問和修改這個變量。傳值的時候會對參數進行拷貝,然后傳給被調用函數,而傳地址只是對地址進行一份拷貝,然后賦給形參,這樣在C++中如果傳遞一個比較大的對象時效率就有所區別了。對于簡單類型的變量來說傳值和傳地址在根本上是沒有區別的,都是傳遞一個數給被調用函數,地址本身就是一個變量,地址變量大小與地址總線有關,常用的是32位地址總線,也就是說地址變量大小為4Bytes(32bit),而怎樣去解釋和使用這個數是我們事先約定好的。約定好的呀!! 計算機就為我們所用嚕,想去哪就去哪...致指針...

轉載于:https://www.cnblogs.com/QingCHOW/p/4588483.html

總結

以上是生活随笔為你收集整理的传值调用 与传地址调用(传引用)的全部內容,希望文章能夠幫你解決所遇到的問題。

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