關於指標和引用的理解

2021-08-16 05:58:10 字數 1593 閱讀 3313

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 說是...

關於指標傳遞和指標的引用傳遞

指標傳遞的實質 指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。引用傳遞的實質 在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開...