天天看點

C/C++中傳值和傳位址(引用)

  C/C++中參數傳遞有兩種方式,傳值或傳位址(傳引用),通常我們要在被調用函數中改變一個變量的值就需要傳位址調用方式,例如:

  很顯然,通過傳值調用并不能改變main函數中的a與b,要想改變a與b的值就必須通過傳位址方式,然後在被調用函數中通過指針通路到主函數中的變量。

  可是通過傳遞變量指針就一定是傳位址調用麼?看下面一個例子:

  其中參數p是一個指針,程式想通過p來得到在get_str(char* p)中配置設定的一塊記憶體。但是上面的代碼并不能完成此功能。原因是程式需要在get_str(char* p)中修改main函數中的指針變量p,使其指向malloc傳回的一塊記憶體,要想在 get_str(char* p)中修改main函數中p的值就隻有把p的位址傳過去,在get_str中通過位址通路主函數中的變量p。正确的代碼如下:

  引用是C++中的文法,結合了傳位址和傳值的優點,即傳遞的是一個位址,但在形式上又沒有指針那個怪異的符合*,看上去舒服多了。

下面是一個傳引用版的swap()函數

  總之,如果想在被調用函數中改變哪個變量的值就需要把那個變量的位址傳給被調用函數,這樣在被調用函數中通過位址就可以通路和修改這個變量。傳值的時候會對參數進行拷貝,然後傳給被調用函數,而傳位址隻是對位址進行一份拷貝,然後賦給形參,這樣在C++中如果傳遞一個比較大的對象時效率就有所差別了。對于簡單類型的變量來說傳值和傳位址在根本上是沒有差別的,都是傳遞一個數給被調用函數,而怎樣去解釋和使用這個數是我們事先約定好的。

轉自:http://blog.chinaunix.net/uid-21411227-id-1826826.html

 2015-03-14 10:44:10

繼續閱讀