關於指針和引用的理解

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){

        int temp ; 

        temp =x ;

        x = y ;

        y = temp ;                         

        printf ("x=%d,y=%d.\n",x,y);  }

    main(){

    int a =4,b=6;

    Exchag1(a,b);

    printf("a=%d,b=%d.\n",a,b) }

    Output:

        x = 6,y = 4  .

        a = 4,  b = 6 . 

原來,在值傳遞中,函數僅將實參a,b的值賦給了形參x,y,所以x,y的改變並不影響實參的值。

(2)地址傳遞

    void Exchg2(int *px , int* py){

    int temp = *px;

     *px  =  *py;

     *py = temp;

    printf("*px=%d,*py=%d.\n",*px,*py); }

    main(){

    int a=4, b =6;

    Exchg2(&a,&b);

    printf("a=%d,b=%d.\n",a,b); }

 

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){

    int temp = x; x = y;

    y = temp;

    printf ("x=%d,y=%d.\n",x,y); }

    main(){

    int a =4;

    int b =6;

    Exchg(a,b);

    printf("a=%d,b=%d.\n",a,b);  }

 

Output:

        x = 6,y = 4  .

        a = 6,  b = 4 . 

操作引用x,y 即 相當於對 實參 a,b進行操作。

(4)函數參數中*&合用的意義 

    eg : void  InitStack(LNode *&first){

                first -> next = null; }

              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指針的別名指針

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章