重读C++ Primer(1) 引用和指针

引用

简单的来说,就是为对象起一个别名。

int i= 0;
int &r = i;

r =3
cout << i <<endl;

>> 3

即 r是i的引用,(r是 i的别名),可以通过操作引用来同等操作被引用的对象。

指针

指针是指向其它对象的对象,指针本身是一个变量

int i = 0;
int *p = &i;

即 p 是 指向变量i的指针变量。p的值是所指向变量的地址,即&i, 修改i的值,只会修改p所指向内存地址所存放的数据,并不会改变p的值。

引用和指针的区别

  1. 引用是对象的别名,它本身不是对象

  2. 由 1 中引用的性质决定了:
    2.1 不能定义引用的引用,因为引用不是对象,不能被引用
    2.2 引用必须初始化
    2.3 引用被初始化之后,便与被引用的对象永久绑定,不能更改。

    int i = 0;
    int &r = i;
    r = 1; //使用引用修改变量的值
    
    >>输出结果为:i = 1 r = 1
    

3.指针是一个变量,它的值是所指向对象的地址。指针的类型仅仅提示在处理它的函数语句所指向的对象的类型

int i = 0;
double d = 3.141592658;
int *p = &i;

cout<< p << endl; // 这里输出的是 i 的地址

p = &d;  //将double类型的对象地址复制给指针p

cout<< (double)*p << endl; // 这里输出的是d

我们看到,最后输出的p的数据并没有被截断或者丢失,因为p始终传递的是对象的地址。

指针传递和引用传递

指针传递

int i = 0;
int *p1 = &i;
int *p2 = p1;
i= 2
cout<< *p1<<*p2<<endl;
int j = 5;
p2 = &j;
cout<< *p1<< *p2<<endl;

>> 2 2
>> 2 5

如上,第一次打印出来的p1,p2的值是相同的,因为它们都指向i的地址;第二次,p2被赋值为j的地址。
指针的传递相当于:
重新申请一个指针变量,然后给这个指针变量赋值,在这之后,它们之间就没有任何关系了。

引用传递

int i =0;
int &r1 = i;
int &r2 = r1;

cout<< i  << r1  << r2  <<endl;

r1 = 2;

cout<< i  << r1  << r2  <<endl;

>> 0 0 0
>> 2 2 2

如上,引用相当于变量本身,给引用复制,相当于给变量和其它同引用赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值