引用和指针的比较

引用和指针的比较

1、定义上:引用定义时便要初始化,不能为空,而且不能再改变;指针可以不初始化,可以指向NULL,而且可以改变。

int a = 10;

int * p = &a;

int &r = a;

2、内存占用上:指针会分配一个4个字节的内存,而引用只是变量的别名,就是变量其本身,不占用额外内存。如果用sizeof的话,引用得出的结果是其所指向的对象大小。

3、操作上:引用没有多级,而指针有多级,如int **p;自增的运算意义不一样。

4、作为函数形参的区别:引用传递的对象本身,而指针也可以通过指向变量的地址修改变量,但会生成一个副本。

注意:指针作为形参可以修改指向对象的值,但指针自身还是不变的,也就是说是值传递,若要同时修改指针自身的值,则需要用“引用”。#include<iostream>

using namespace std;

void f(int *p);

int main(void)

{

    int *p = NULL;

    test(p);

    return 0;

}

void f(int *p)

{

  int a = 1;

  p = &a;

}

变量a的地址不为NULL,但是main函数中p的值还是NULL,为什么没有改变呢?这是因为指针p传入test函数中时,编译器会生成一个指针的副本:_p,test函数中是对_p操作,所以实际上p的值是不变的,这是指针的值传递;如果p指向了一个变量,那么通过_p是可以对变量进行修改等操作的。

如果要同时改变指针该如何做呢?用“引用”。

#include<iostream>

using namespace std;

void f(int *&p);


int main(void)

{

    int *p = NULL;

    f(p);


    return 0;

}

void f(int *&p)

{

  int a = 1;

  p = &a;

}

此时传递的时p自身,编译器不会再生成一个副本。此时返回main函数中p的值已经不是NULL了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值