函数探幽(1) --引用(1)

本文介绍了C++中的引用概念,包括如何创建引用变量、引用的使用及其与指针的区别。引用作为变量的别名,必须在声明时初始化,并始终绑定到同一变量,不能改变其指向。示例代码展示了引用操作的影响。
摘要由CSDN通过智能技术生成

1.引用变量
引用是已定义的变量的别名(另一个名称)。如:有一变量x,而y作为变量x的引用,则可以交替使用x和y来表示该变量。就像有两个单词表示同一个意思。


1.1.1.创建引用变量
在c++中,&符号除了用来指示变量的地址外,&的另一个含义就是用来声明引用。例:

int cats;
int & tomcats =cats;

其中,&不是地址运算符,而是类型标识符的一部分。上述声明允许将cats与tomcats互换——它们指向相同的值和内存单元。

1.1.2.引用变量的使用

#include<iostream>
int main() {
    using namespace std;
    int cats = 100;
    int & tomcats = cats;
    cout << "cats = " << cats;
    cout << ", tomcats = " << tomcats << endl;
    tomcats++;
    cout << "cats = " << cats;
    cout << ", tomcats = " << tomcats << endl;
    cout << "cats address = " << &cats << endl;
    cout << ", tomcats addresss = " << &tomcats << endl;
    return 0;
}

下面是上面的程序的输出:

cats = 100, tomcats = 100
cats = 101, tomcats = 101
cats address = 006FFA38
, tomcats addresss = 006FFA38
请按任意键继续…

从中可知,cats和tomcats的值和地址都相同,无论两个中的哪一个进行相应操作,另一个都会受到影响。

1.1.3.与指针的区别
引用看上去很像伪装的指针。实际上,两者还是同中有异的。

差别之一:
必须在声明引用时将其初始化,而不能像指针那样,先声明,再赋值:

int cat;
int & tomcat;
tomcat = cat;      // 你不能这么做

差别之二:
引用一旦与某个变量关联起来,就将一致效忠于它,也就是说:
int & tomcat = cat;
实际上是下述代码的伪装表示:
int * const p =&cats;
引用 tomcat 扮演的角色与表达式*p相同
若试图改变tomcat 的指向,将发生:

#include<iostream>
int main() {
    using namespace std;
    int cats = 100;
    int & tomcats = cats;
    cout << "cats = " << cats;
    cout << ", tomcats = " << tomcats << endl;
    cout << "cats address = " << &cats ;
    cout << ", tomcats addresss = " << &tomcats << endl;
    int rats = 50;
    tomcats = rats;
    cout << "rats = " << rats;
    cout << ", cats = " << cats;
    cout << ", tomcats = " << tomcats << endl;
    cout << "rats address = " << &rats;
    cout << ", tomcats address = " << &tomcats << endl;
    system("pause");
    return 0;
}

结果是:

cats = 100, tomcats = 100
cats address = 008FF990, tomcats addresss = 008FF990
rats = 50, cats = 50, tomcats = 50
rats address = 008FF978, tomcats address = 008FF990
请按任意键继续…

最初,tomcats引用的是cats,随后试图将tomcats作为rats的引用,看似可以,实质tomcats的地址并未发生变化,其实就是

cats = rats;    //将rats变量的值赋给cats变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值