1.指標的定義int *a,a為指標變數,將int *看作整體(型別)。另外*符號也可看作取值符,即對a指標取其指向位址的值。
eg: int a = 10;
int *b = a; //false
int *b = &a;//true
//將第三句可拆為 int *b; b = &a; 同上面將int *看作整體結合,即定義了b指標,不能直接將a物件賦給b
2.引用符號& , 與取址符相同,但意義截然不同。
eg: int a =10;
int & b; //false 引用定義需要給出初值
int & b = a;//true
b++;
//最後,得a=b=11;此時 b 為a物件的引用 ,即相當於a的「別名」,但所指的物件即為a,對b的更改即對啊也進行。
而同樣的 int *x = &a; 此時 &為取址符
3.指標與引用在 函式引數傳遞中的實用
(1)值傳遞
void exchg1(int x , int y)
main()
output:
x = 6,y = 4 .
a = 4, b = 6 .
原來,在值傳遞中,函式僅將實參a,b的值賦給了形參x,y,所以x,y的改變並不影響實參的值。
(2)位址傳遞
void exchg2(int *px , int* py)
main()
output:
*px = 6,*py = 4 .
a = 6, b = 4 .
函式介面部分 exchg2(int *px , int *py),其中px,py都是指標,而傳入的實參為a,b的位址
其實函式進行了隱含的操作 :
px = &a ;
py = &b;
故對*px,*py操作,即對a,b變數進行操作。
(3)引用傳遞
void exchg3(int &x, int &y)
main()
output:
x = 6,y = 4 .
a = 6, b = 4 .
操作引用x,y 即 相當於對 實參 a,b進行操作。
(4)函式引數中*&合用的意義
eg : void initstack(lnode *&first)
main(){
lnode *p;
initstack(p);//傳入指標,作為實參
其中有lnode *&first , 將lnode *看作整體 ,即 &first 表示為 對實參的引用的定義, 整體即為lnode型的指標。
故first 為指標p(實參)的引用 的指標!
對first進行操作,即對p進行操作。能既改變*p指向的內容,又能改變p這個指標
總結四種傳遞方式:
值傳遞,函式呼叫 function(a),直接傳遞實參a的值,操作並不影響a
引用傳遞,(&p),function(a),使用a的引用p,操作影響a
位址傳遞,(*p),function(&a),傳入a的位址,對*p操作印象a
指標傳遞,(*&p),function(a),此處a為指標,p為a指標的別名指標
關於引用和指標
首先最近複習了一下c 中引用的概念。引用在c 中的內部實現是乙個常指標。type name type const name。c 編譯器在編譯過程中使用常指標作為引用的內部實現,因此引用所占用的空間大小與指標相同 從使用的角度,引用會讓人覺得只是乙個別名,其實有自己的儲存空間。這是c 為了實用性而做出...
關於 指標的引用和指標值傳遞
1,形參是實參的拷貝 值一樣,儲存位址不一樣 包括指標變數,指標變數 int p a p只是儲存位址的變數。請欣賞第一段 回答輸出結果 18分 include includeusing namespace std void try change int p int b 7 p b cout p 說是...
關於指標傳遞和指標的引用傳遞
指標傳遞的實質 指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。引用傳遞的實質 在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開...