眾所周知,&是取位址,函式引數前有&是傳遞位址,*是指標;那*&有什麼用呢?下面先看一下眾多網友的解釋
對於int *&a:
1.int*& a: a is a reference of pointer to int
2.c++裡面的引用,
a是對另乙個int *型別變數的引用;
3.指向指標的指標;
4.原來a不是int型別,比如說是char型別,
那麼&a得到的應該是char*型別,
現在使用int*強制轉換到int*型別。
觀上幾種解釋,我認為1、2、3是有道理的,4是牛頭不對馬嘴。
首先,必須要說明的是*&是有用的,效果和單獨乙個*或&是不同的,對引用有所了解的同學對於引用的引用(指標的指標)也不難理解。下面我們先做個試驗
我們要了解變數需要乙個空間儲存的,這就引出了變數的位址,引數傳遞是就可以傳遞位址過去;那麼我們也可以把位址放到乙個儲存空間裡,這就有了位址的位址,這裡就不得不說一下'->'這個符號,他能從位址或位址的位址找到物件:eg如有一結構體sqlist,,方法 void createlist(sqlist *&l.....) 方法中l->data[i] = a[i]。所以傳遞位址的位址時不必擔心使用的複雜。
//程式1
#include
using namespace std;
void test(int *&p,int &a)
{cout<<&p《這個 程式輸出的兩個值一樣大小一樣,說明儲存int指標的位址是一樣的
//c程式2
#include
using namespace std;
void test(int *p,int &a)
{cout<<&p《這個 程式輸出的兩個值不一樣,說明儲存int指標的位址不相同的
在程式1中可修改p的值,在函式結束後仍能儲存修改修改方式可直接為 p = ...
在程式2中有兩種修改方式:1. p = b;2. *p = 4。其中1修改的結果不能再函式外有效,2可以在函式外有效
簡而言之,使用*和使用*&要看希望的效果是什麼。
C 中如何把函式當做引數傳遞到別的函式中
問題 c 想要傳遞函式引數,但是引數型別是函式,不知道如何傳遞。解決過程 1.找了半天,看到這裡 把函式名作為引數傳遞 c 委託的宣告和使用,說到用delegate,但是感覺有點複雜,而且不太像是能方便的解決此處的問題。2.說實話,找了其他一些類似的帖子,還是沒太看懂。3.不過最後還是自己在他們的描...
c 函式引數傳遞
void reset int num void creset const int num void preset int p void cpreset const int p void rreset int arr 10 void initiaresert initializer listlist ...
C 函式位址傳遞和值傳遞區別
目錄 c 位址傳遞和值傳遞區別 1 位址傳遞vs值傳遞 2 演示 相當於通過尋找位址 傳遞,然後 解引用,修改變數的值。void swap int p1,int p2 swap a,b 呼叫值傳遞 之間進行形參內部的值的改變,不會改變實參,只會影響形參。相當於在函式內部做了賦值的操作。void sw...