今天在看一段c代碼的時候看到一個函數的形參是(int *&a)居然是這個東西,這讓我好生疑惑啊,不知道用這么多的地址符號用意何在呢?傳址么?
那也不必這樣,只需要用指針完全能夠達到這樣的效果啊,交換兩個整形變量的數據,只要定義一個函數 swap(int* a,int *b) 在函數里面交換*a和*b的值即可了,這樣便達到了修改形參而且改變實參的作用呀。
於是我去圖書館拿了一本c語言語法的書籍,發現&符號是取地址的作用,那么*&是個啥東西呢,一直沒有看見。
最后在c++的一本書上也看見&這個符號,居然看了看了另外一種用法,“引用"運算符。是放在類型后面的,如int &a 這樣&就是不取地址的意思了,而且對形參a進行引用.
舉個例子說明一下吧
引用參數 swap(int&a,int &b) 然后調用的時候只需要swap(a,b)這樣也能達到傳址的作用,實際上是引用參數把實參換了一個別名而已,對引用形參進行操作實際就是對實參進行操作。
這種用法在c中是沒看見的,在c++中出現過,通過在c++中了解的&運算符還有做引用這樣的用法,那么來解釋今天看見過的函數形參test(int* &a);
先前就說過了,&作為引用的用法是,是放在類型后面,此形參是將int* 看成一個整形指針類型,那么int* &a這個形參a代表int* 類型的引用參數
所用調用時,int * a=&b; test(a);即可。那么作用是,在test函數中操作a指針相當於操作實參中的a指針。
哎,懂得指針的朋友看了這種用法,這多多此一舉。搞的這么復雜。
說了這么多,說的自己都雲里霧里,如果有朋友看了這篇文章還有不清楚地,歡迎來提問,相互進步。