简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

本篇目的:理解C++之指向引用的指针和指向指针的引用。
首先,了解一下指针和引用的概念:
指针(Pointer)是一个变量,用于存储另一个变量的内存地址。通过指针,我们可以直接访问和修改存储在该内存地址上的值。
引用(Reference)是一个已存在变量的别名。通过引用,我们可以使用原始变量的名称来操作它,而无需使用指针的间接访问。
现在,让我们来看看指向引用的指针和指向指针的引用的原理:
指向引用的指针:
指向引用的指针是一个指针,其值存储的是一个引用的地址。这意味着我们可以使用指针来间接访问引用所指向的变量。通过使用指向引用的指针,我们可以在不直接使用引用的情况下,通过指针来操作引用所指向的变量。
指向指针的引用:
指向指针的引用是一个引用,它引用了一个指针变量。这允许我们通过引用来操作指针变量本身,而不是通过指针操作所指向的变量。通过使用指向指针的引用,我们可以更方便地对指针进行操作,并且可以在函数参数中传递指针的引用。
int num = 10;
int* ptr = # // 定义一个指针,指向num
int& ref = *ptr; // 定义一个引用,引用ptr所指向的对象
// 修改引用ref的值,等价于修改num的值
ref = 20;
std::cout << num << std::endl; // 输出:20
ptr是一个指向num的指针,ref是一个引用,引用了ptr所指向的对象。通过修改ref的值,实际上修改了num的值。
int num = 10;
int* ptr = # // 定义一个指针,指向num
int*& ref = ptr; // 定义一个指向指针的引用,引用ptr
// 修改指针ptr的值,等价于修改了num的值
*ref = 20;
std::cout << num << std::endl; // 输出:20
ref是一个指向指针的引用,引用了ptr这个指针。通过修改ref引用的指针的值,实际上修改了ptr所指向的对象,进而也修改了num的值。
#include
using namespace std;
int main() {
int x = 5;
int& ref = x; // 引用变量ref绑定到x上
int* ptr = &ref; // 指针ptr指向ref所引用的变量x
*ptr = 10; // 通过指针ptr间接修改x的值
cout << x << endl; // 输出:10
return 0;
}
创建了一个指向引用的指针ptr,ptr指向了引用ref所绑定的变量x。通过改变指针ptr所指向的地址上的值,间接修改了x的值。
#include
using namespace std;
int main() {
int x = 5;
int* ptr = &x; // 指针ptr指向变量x
int** ref = &ptr; // 引用变量ref引用指针ptr的地址
**ref = 10; // 通过引用ref间接修改x的值
cout << x << endl; // 输出:10
return 0;
}
创建了一个指向指针的引用ref,ref引用了指针ptr的地址。通过改变指针ptr所指向的地址上的值,间接修改了x的值。
#include
using namespace std;
int main() {
int x = 5;
int& ref = x; // 引用变量ref绑定到x上
int* ptrArr[5] = { nullptr }; // 指针数组,元素类型为指向int的指针
ptrArr[0] = &ref; // 指针数组的第一个指针指向ref所引用的变量x
*ptrArr[0] = 10; // 通过指针数组间接修改x的值
cout << x << endl; // 输出:10
return 0;
}
创建了一个指向引用的指针数组ptrArr。其中,ptrArr的第一个指针元素指向了引用ref所绑定的变量x。通过改变指针数组元素所指向的地址上的值,间接修改了x的值。
#include
using namespace std;
int main() {
int x = 5;
int* ptr = &x; // 指针ptr指向变量x
int* (&refArr)[5] = ptr; // 引用数组refArr引用ptr的地址
*refArr = 10; // 通过引用数组refArr间接修改x的值
cout << x << endl; // 输出:10
return 0;
}
创建了一个指向指针的引用数组refArr。其中,引用数组refArr引用了指针ptr的地址,也就是指向变量x的地址。通过改变引用数组元素所引用的指针的值,间接修改了x的值。
#include
using namespace std;
int main() {
int x = 5;
int& ref = x; // 引用变量ref绑定到x上
int* ptr = &ref; // 指针ptr指向ref所引用的变量x
int*& refPtr = ptr; // 引用ptr的引用refPtr
*refPtr = 10; // 通过引用引用间接修改x的值
cout << x << endl; // 输出:10
return 0;
}
创建了指向引用的指针的引用refPtr。refPtr引用了指针ptr的地址,也就是指向变量x的地址。通过改变refPtr所引用的指针的值,间接修改了x的值。