【入门级-C++程序设计:11、指针与引用-引 用】

引用是C++中一种重要的复合类型,它为已存在的变量提供了一个别名。引用本质上是对另一个变量的间接访问方式,但与指针不同,引用提供了更安全、更直观的语法。

基本语法

类型 &引用名 = 被引用变量;

举例说明:

int x = 10;

int &ref = x; // ref是x的引用(别名)

ref = 20; // 给ref赋值为20,现在x的值变为20

cout << x; // 输出20

下面通过几个具体的例子来详细说明C++中引用的使用和特性:

示例1:基本引用使用

#include

using namespace std;

int main() {

int num = 42;

int &ref = num; // ref是num的引用(别名),初始化,声明时绑定到有效变量num

cout << "num: " << num << endl; // 输出42

cout << "ref: " << ref << endl; // 输出42

ref = 100; // 通过引用修改值

cout << "修改后 num: " << num << endl; // 输出100

// 验证它们的内存地址相同

cout << "&num: " << &num << endl;

cout << "&ref: " << &ref << endl; // 输出相同的地址

return 0;

}

输出:

num: 42

ref: 42

修改后 num: 100

&num: 0x7ffd4a3b5a24

&ref: 0x7ffd4a3b5a24

说明:

ref 和 num 是同一块内存的别名,修改 ref 等同于修改 num。

引用和原变量的地址相同。

示例2:引用必须在声明时初始化

int main() {

int x = 10;

int &ref1 = x; // 正确:声明时初始化

int &ref2; // 错误:引用必须初始化(编译报错)

return 0;

}

说明:

引用必须在定义时绑定到一个已存在的变量,不能先声明后赋值。

示例3:函数参数传递(避免拷贝)

#include

using namespace std;

void swap(int &a, int &b) {

int temp = a;

a = b;

b = temp;

}

int main() {

int m = 5, n = 10;

swap(m, n); // 传递引用,直接修改原值

cout << "m: " << m << ", n: " << n << endl; // 输出 m: 10, n: 5

return 0;

}

输出:

m: 10, n: 5

说明:

函数参数使用引用时,可以直接修改实参的值(类似指针但语法更简洁)。

避免了值传递时的拷贝开销(对大型对象尤其重要)。

示例4:引用 vs 指针

#include

using namespace std;

int main() {

int val = 50;

// 指针方式

int *ptr = &val;
ptr = 60; // 需要解引用操作符( )

// 引用方式

int &ref = val;

ref = 70; // 无需解引用,直接使用

cout << "val: " << val << endl; // 输出70

return 0;

}

说明:

引用比指针更安全(无空引用风险)且语法更直观。

示例5:常量引用(避免修改)

#include

using namespace std;

void printValue(const int &r) {

// r = 100; // 错误:不能通过常量引用修改值

cout << "值: " << r << endl;

}

int main() {

int x = 42;

printValue(x); // 安全传递,避免拷贝

return 0;

}

说明:

const int & 表示只读引用,适用于不希望函数修改实参的场景。

常用于传递大型对象(如std::string)以避免拷贝开销。

示例6:引用不能重新绑定

int main() {

int a = 1, b = 2;

int &ref = a;

ref = b; // 这是将b的值赋给a,而非让ref改为引用b!

cout << a; // 输出2(a的值被修改为2)

return 0;

}

说明:

引用一旦初始化后,不能再绑定到其他变量。ref = b 是赋值操作,而非重新绑定。

引用的特点总结

别名性质:引用不是独立的对象,它只是已存在变量的另一个名字,引用和原变量共享同一内存地址。

做函数参数:引用传递可避免拷贝,且能修改实参(若需只读则加const)。

必须初始化:引用在声明时必须初始化,声明时需绑定到有效变量;且之后不能改变绑定的对象,减少了意外修改的风险。

安全性(无空引用):引用必须绑定到一个有效的对象(指向有效对象),不存在"空引用",避免了空指针风险。

自动解引用:使用引用时不需要特殊语法,就像使用普通变量一样,不需要解引用操作符(*)。

相关推荐
Kevinhbr3 分钟前
CSP-J/S IS COMING
数据结构·c++·算法
蕓晨22 分钟前
set的插入和pair的用法
c++·算法
金古圣人1 小时前
hot100 滑动窗口
数据结构·c++·算法·leetcode·哈希算法
蒹葭玉树1 小时前
【C++上岸】C++常见面试题目--算法篇(第二十期)
c++·算法·面试
轮到我狗叫了1 小时前
牛客.小红的子串牛客.kotori和抽卡牛客.循环汉诺塔牛客.ruby和薯条
java·开发语言·算法
yudiandian20141 小时前
【QT 5.12.12 下载 Windows 版本】
开发语言·qt
高山有多高1 小时前
详解文件操作
c语言·开发语言·数据库·c++·算法
狂奔的sherry2 小时前
单例模式(巨通俗易懂)普通单例,懒汉单例的实现和区别,依赖注入......
开发语言·c++·单例模式
EnigmaCoder2 小时前
【C++】引用的本质与高效应用
开发语言·c++
郭涤生3 小时前
arma::imat22
c++