7.5 二级指针
指针本身也是一个变量,也有自己的地址。指向指针的指针叫二级指针(pointer to pointer),写作 int **。
cpp
int data = 5;
int *p = &data; // 一级指针,指向 data
int **q = &p; // 二级指针,指向 p
std::cout << data << std::endl; // 5
std::cout << *p << std::endl; // 5
std::cout << **q << std::endl; // 5q 里保存的是 p 的地址。*q 就是 p,**q 再解引用一次得到 data。每多一个 *,就多“跟随”一次地址。
正在加载交互实验...
正在加载概念检查...
正在加载本节练习...
让函数修改调用者的指针
二级指针最常见的用途,是让函数去修改调用者的“指针”。如果只传 int *,函数改的只是指针的副本;要改调用者的指针本身,就得传 int **。
cpp
void allocate(int **out) {
*out = new int;
**out = 7;
}
int main() {
int *q = nullptr;
allocate(&q); // 现在 q 指向一块新内存
std::cout << *q << std::endl; // 7
delete q;
return 0;
}argv 也是二级指针
main(int argc, char* argv[]) 里的 argv 表现得像一个 char**:它指向一组字符串指针,每个 argv[i] 是一个字符串(命令行参数详见 6.3)。
正在加载本节练习...