指針引用參數
㈠ 指針與引用的區別,引用作為函數參數時的用法
指針靈活一點,引用方便一點。
引用作為參數時,我舉個例子給你
void fun(int &iNum)
{
iNum = 1;
}
int main()
{
int iNum = 0;
fun(iNum)
return 0;
}
最後內輸出的結果容iNum 為1而不是0
㈡ 指針引用作參數和指針做參數的區別
樓上的沒說全,你都知道引用是別名,那就應該知道在函數內部可以修改rp指向的地址,以前指向的是a,你可以把他改成指向b;傳指針是傳入參數的一份拷貝,在函數內部修改指針指向的地址,並不會修改原實參所指向的地址。可以寫一個簡單的程序測試下,在函數內部修改形參所指向的地址,調用完成後,看看實參指向的地址是否改變!傳指針不會改變,傳引用的會!動手實驗下,記得更勞靠!
㈢ 什麼時候該用指針參數 什麼時候該用引用參數
這個問來題不太容易嚴格區分,不過自可以簡單說一下。
指針:大家都知道,指向一個內存地址。但同時請注意一個東東,就是指針的步長(我叫它步長)其實就是指針的類型。C/C++中,類型轉換對於指針來說同樣適用,也就是可以改變步長。所以它比較特別,靈活性很大。更特別的一點是:它可以什麼也不指向,就對著NULL/0。
引用:它的局限性要大很多,它只是一個對象的別名。這個別名的意思就是「它是依賴別的對象存在現而存在,它不會獨立存在!」。所以請特別注意,引用必須指向一個已經存在的對象,不可以憑空存在。
明顯的區別:
指針不依賴於對象的存在而存在,就是可以「憑空存在」;而引用不能「憑空存在」,必定指向一個對象。
一般來說,能用引用的地方,用指針也可以。但是指針太靈活(它可以指向NULL),然而如果此時提取指針對象就會出現「不明確行為」的嚴重錯誤。然而用引用就不會出現這樣的錯誤,因為引用必須指向一個已經存在的對象,它不會為空。
想說也就是這么多了,希望你多多使用就能多多體會了。
㈣ 什麼時候用指針形參什麼時候用引用形參
標准 C 中是沒有引用形參的,只能使用指針形參。
C++ 引入指針形參是為了降低指針靈活性帶來的風險,指針形參不僅可以將數據的引用傳入函數,還可以在函數內改變這個指針,也就是說在函數內部可以改變調用域的變數(而不僅僅是對象)。
相比起引用,指針有這些特點:
指針變數可以被重復賦值或更改(引用則不行,一經賦值不能再改)
指針變數可以為空(引用必須指向具體對象)
如果你用不到這些特性反而覺得它們會帶來麻煩,而且可以接受非 Pure C(例如不需要支持 Objective-C 等其他 C 的超集),那麼就用引用參數吧,甚至還可以在需要的情況下加 const 進一步約束。
㈤ c++中的 引用型指針參數如 (類名 *& 變數名),這是怎麼用的該如何理解
指針的引用,指針它也是一個變數,*&就和普通變數的引用一樣,也可以理解為指針變數專的別名。如int*& a,那麼屬在函數裡面對a的值進行改變,那麼在調用函數時傳入的參數的指針值也會改變
再實際點的例子,void*& fun(int*& a);調用時,有一個指針int* pointer = NULL;,然後fun(pointer),在fun裡面對a重新賦值,a = &other,那樣子外面pointer的值也就變成了&other
㈥ 形參實參,指針引用
如果HL是指針則:
定義時
void InitList(LNode &HL)
應該這么用
InitList(*HL);
注意上面的*不是表專示指針,而是表示取HL所指向的內容屬。
定義時
void InitList(LNode *HL)
則應該這么用
InitList(HL);
但這只是單純的從語法來回答你的問題的,對於你這個函數,我想函數的意圖是初始化一個鏈表,並且頭結點HL初始為NULL。
那麼你這里的參數HL就必須是個指針的引用或指針的指針了。
否則
void InitList(LNode &HL)
的形式調用InitList(*HL)時會報錯(訪問無效地址)
void InitList(LNode *HL)
的形式調用InitList(HL)時HL還是會為NULL(值傳遞,頭結點沒有返回出來),而產生內存泄漏。
㈦ 指向指針的指針和指針的引用做函數參數怎樣理解,求大神解釋。
你的問題本質就是指針和引用的區別,請參考以下鏈接
http://..com/question/1638411952021780300.html?oldq=1
只不過,你的問題中,被指針指向和引用的是另一個指針變數。假設指針的指針為pp,指針的引用為r,而被指向的指針為p,則:
int a;//目標整數變數
int *p=&a;//一級指針
int **pp=&p;//二級指針
int &R=&p;//指針的引用
他們的關系用邏輯符號表示為:
pp->p->a(PP的值為p的地址,p的值為a的地址,即pp指向p,p指向a,PP本身也需要佔用內存空間,所以PP也有自己的地址)
R=p->a(R引用p的地址,p的值為a的地址,即R是p的別名,p指向a,其中R的值就是p的地址,R本身不需要佔用內存空間,也就沒有自己的地址)
因此,引用和指針變數的區別是,引用本身不佔用內存空間,指針變數需要佔用內存空間(凡是變數都需要佔用內存空間,凡是佔用內存空間必然有地址)。
如還不明白可以追問。
㈧ C++中使用指針、引用進行參數傳遞
這是經典的C++問題
1、常規情況
函數參數傳遞是所謂的「值傳遞」。啥意思,就是傳的只是值,而不是變數自己以身相許。上面的例子來說,main中的ab傳遞給函數的ab發生了什麼呢,是main中的ab把值傳遞給了函數的ab,這是四個變數!!!main的ab和swap的ab不是一碼事!!!當swap通過傳值得到a5b10後,在swap中會互換,但是main的中的ab怎麼會變呢?他們傳值完畢後就沒有關系了!
2、引用
什麼叫引用?引用時變數的別名,也就是引用不是一個獨立的變數,只能依附於其他變數。你的例子中swap中沒有ab兩個變數,只有main中ab的兩個別名,只是別名碰巧也叫ab。在swap中對swap的ab的任何操作,本質上操作的都是main的ab!想想一下一個人在mian中叫張三,臉上有鬍子。他的小名叫狗剩。在swap中我們說,吧狗剩的鬍子颳了。然後回到main中,張三同學的額鬍子有沒有?當然沒有了
3、指針
指針存放對象的地址。在你的例子中,swap中的ab和main中的ab的關系式,swap是mian中ab的地址。想想一下,mian中的ab地址為AB,在swap中我們說吧A地址的傢伙變為100,B地址的變為1000.請問mian中變了沒有?當然會變!!
這個問題關鍵是理解第一個部分,swap中的ab和mian中的ab是獨立的四個變數
㈨ 指針能作為引用參數嗎
可以,你可以聲明類似的函數原型
void fun(int *& p);
p綁定為另一個int指針(本尊)的引用,改變p的值,也會改變本尊的值。
㈩ c++ 函數參數,指針和引用
1、常規情況
函數參數傳遞是所謂的「值傳遞」。啥意思,就是傳的只是值,而不是變數自己以身相許。上面的例子來說,main中的ab傳遞給函數的ab發生了什麼呢,是main中的ab把值傳遞給了函數的ab,這是四個變數!!!main的ab和swap的ab不是一碼事!!!當swap通過傳值得到a5b10後,在swap中會互換,但是main的中的ab怎麼會變呢?他們傳值完畢後就沒有關系了!
2、引用
什麼叫引用?引用時變數的別名,也就是引用不是一個獨立的變數,只能依附於其他變數。你的例子中swap中沒有ab兩個變數,只有main中ab的兩個別名,只是別名碰巧也叫ab。在swap中對swap的ab的任何操作,本質上操作的都是main的ab!想想一下一個人在mian中叫張三,臉上有鬍子。他的小名叫狗剩。在swap中我們說,吧狗剩的鬍子颳了。然後回到main中,張三同學的鬍子有沒有?當然沒有了
3、指針
指針存放對象的地址。在你的例子中,swap中的ab和main中的ab的關系式,swap是mian中ab的地址。想想一下,mian中的ab地址為AB,在swap中我們說吧A地址的傢伙變為100,B地址的變為1000.請問mian中變了沒有?當然會變!!