关于指针和引用的理解

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指针的别名指针

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值