引用傳指針
『壹』 引用傳值和指針傳值的區別
首先要搞清楚指針和引用區別。引用只是相當於一個變數的別名而已,並不是一個具體的對象,在內存中並不會分配空間。而指針是具體一個對象,聲明一個對象時會在內存中為指針也分配空間。當普通變數作為形參傳值時,只是將該變數的值傳給函數,在函數內部不管如何變化都不會改變改變數的值。但是當引用傳值時,在函數內部如果對形參做改變的話就會對該變數做改變,此時的形參相當於該變數的一個別名,對這個別名做出的改變就相當於對該變數做出改變。當指針作為形參向函數傳值的時候是傳的改變數的地址,所以在函數內部對該地址的內容做出改變就相當於對該變數的改變。
不知這樣解釋樓主明白不,不明白可以接著追問,望樓主採納。
『貳』 c++ 怎麼用引用傳遞 傳 數組 ,怎麼用指針傳遞傳數組 求大神。 ,,,,
1 .函數定義:void f1(int *b[],int i) 函數調用 :f1(b,i);
你有沒有發現 b是一個指向指針的指針了,用指針,你應該這樣寫:
函數定義:void f1(int *b,int i) 函數調用 :f1(&b,i);表示函數定義里邊的b指向main函數里邊 的 b;
2.用引用:函數定義:void f1(int* &b,int i) 函數調用 :f1(b,i);表示指針的引用。void f1(int &b[],int i)你這樣寫,就不對了吧,引用的指針。沒有這樣寫的啊。
注意,形參和實參是不一樣的。void f1(int *b,int i) 函數調用 :f1(b,i);如果你這樣寫,只是把main的b賦值個f1的b。並不是main函數里的b的本身。
『叄』 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 BubbleSort(int *p,int n)
改成
void BubbleSort(int (&p)[9],int n)
按引用傳遞要求形參指定數組大小,不如指針
『伍』 指針傳遞引用傳遞
只能作輸入的時候才加const
加了const就是不能改變的,不能做輸出參數`
如:fun( const int& in, int& out )
// out 可作為輸入/輸出參數,in則不可,只能作輸入參數`
『陸』 傳指針和傳指針引用的區別/指針和引用的區別(
指針:(通俗理解即為一個變數在內存中的編號(地址))
例1:int b = 2;
int *p = &b;
以上例子就是將b變數在內存中的地址賦值給這個指針變數p, 意味著p的值就是變數b的地址。
指針變數:自己的值(指針變數本身的內容)是某個變數的地址
例1中的p就是指針變數
變數值:變數本身在內存中一定單元中bit組合的數據表示
變數值就是該變數本身的值例1中的b的變數值就是2,p的變數值就是(b的地址)
變數地址:即使指針(指針就是一個地址,地址就是指針)
例1中的p的值就是變數地址, 例1中:&b也是變數地址,&為取地址符號
在明白上面的每個概念後那麼你的問題「傳指針和傳指針引用的區別/指針和引用的區別」就好回答了。
傳指針:就是將例1中的p或者&b作為一個函數的實參發送給形參
傳指針引用:就是把例1中的指針變數p(即使&p)的地址作為一個函數的實參。
注意上面的&p你會問這個什麼意思? 你應該只是&為取地址運算符號。被&運算的對象必然是一個變數,那麼你要明白一件事情我沒在例1中寫(&b )你應該明白把變數b的地址取出來,那麼(&p)也是一樣的道理,對沒有錯就是取出指針變數p的地址, 切記哦指針變數也是變數哦! 它和普通的變數沒什麼區別,只不過它是用來保存某個變數的地址罷了。你看例1中的int *p = &b 可不就是把一個普通的int類型的變數的地址賦值給p指針變數了么。
那麼關鍵問題就是「傳指針和傳指針引用的區別」
本質上沒有區別,
還是在例1的基礎上加上以下代碼:
函數1:voidfun1(int*p)//這里寫*p就是說這個形參值接受一個int類型變數的地址
{
}函數2:voidfun2(int**p)
{
intq=3;
}
下面我們用指針傳遞 調用這個fun1函數:
voidfun1(&b);//
調用後b的值變成了1
下面我們用指針引用傳遞 調用這個fun2函數:
voidfun2(&p);//這里寫&p意味著被調用函數是應該是接受一個【指針變數】的地址的(即傳指針引用)
調用後p的值變成了某個變數的地址
好了總結一下:
指針傳遞:發送了一個變數的地址, 接受這個地址的函數可以利用這個地址找到這個變 量進行操作。
指針引用傳遞:發送了一個指針變數的地址, 接受這個指針變數地址的函數可以利用這個地址找到這個指針變數進行操作。
『柒』 問題:向函數中傳遞指針和傳遞指針的引用的區別
首先確認下是問的 指針 與 指針的引用的區別?
不是想問
向函數中傳遞內指針和傳遞引用容的區別?
指針 與 指針的引用的區別?
{
我覺得是沒有區別的。 只是有點畫蛇添足的感覺。
可能就是 佔用release模式下,佔用內存多少的問題了。(具體真不清楚引用是否佔用內存)
但是現在的機器, 4個位元組···完全可以忽略。
}
『捌』 函數傳遞引用指針
第一個int &**a
第二個int &*b
『玖』 C++ 函數傳指針和傳引用的區別
指針抄是用來指向某個變數,而引用是給變數取個別名,其作用就如同typedef一樣。 用引用作形參時在調用函數里就像操作實參一樣,不需要考慮實參的地址問題 用指針做形參時,由於指針的值是變數的地址,所以要通過對地址解引用來操作其所指的變數。