C/C++:指针、引用【指针:指针是一个变量,只不过这个变量中存储的是一个地址,指向内存中的一个单元】【引用:引用和原变量是同一个东西,只不过是原变量的一个别名】

指针:指针是一个变量,只不过这个变量中存储的是一个地址,指向内存中的一个单元。

引用:引用和原变量是同一个东西,只不过是原变量的一个别名。

int a = 10;  // 定义一个整型变量a
int *p = &a;  // 定义一个指向整型变量的指针变量p,该指针指向a的存储单元,即p的值是a存储单元的地址
int &b = a;   // 定义一个整型变量a的引用,a和b是同一个东西,在内存中占用同一个存储单元

一、引用

int a = 10;
int &b = a;  
  • int &b = a; 等价于 int *const b = a;,即引用是一个指针常量(又称常指针,即一个常量,其类型是指针)

二、常引用

int a = 10;
const int &b=a;
  • const int &b = a;等价于const int * const b = a;不仅仅是b这个地址不可修改,而且其指向的内存空间也不可修改。

三、引用的特性

  • 引用在定义时必须初始化
  • 一个变量可以有多个引用
  • 引用一旦绑定某个实体,就不能再是其他变量的引用。

四、引用的使用场景

1、给变量起别名

int a;
int &b = a;

2、将引用作为函数的参数

使用引用类型就不必在swap中声明形参是指针变量,指针变量要另外开辟内存单元,其内容是地址。

而引用变量不是一个独立的变量,不单独占内存单元。而且在调用swap函数时,只需要传值即可,将引用作为函数的形参更加简单、直观、方便。

void swap(int &a, int &b)
{
    int temp = a;                                                           
    a = b;                                   
    b = temp;
}

3、返回值

    // 值返回
    int Add(int a, int b){
    	return a + b;
    } 
    // 引用返回
    int& Add(int & a, int& b){
	    int c = a + b;
	    return c;
    }

五、引用、指针(区别与联系)

1、相同点

底层的实现方式相同,都是按照指针的方式实现的

2、不同点

  • 引用定义的时候必须初始化,指针可以不用初始化;
  • 引用一旦初始化为指向一个对象,就不能再指向其他对象,而指针可以在任何时候指向任何一个同类型的对象;
  • 没有空引用,但是有空指针;
  • 在sizeof中的含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节的个数(在32为平台下,指针求sizeof永远是4);
  • 引用++改变的是变量的内容,指针++改变的是指针的指向;
  • 有多级指针,没有多级引用;
  • 引用使用起来比指针安全;
  • 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄漏;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值