小探讨:指针的层级问题
给定一个经典的指针使用案例:
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int x=1, y=2;
swap(&x, &y);
//虽然c++ swap实际上是用传递实参实现的:swap(int &a, int &b){} swap(x, y);
起因是我很好奇,为什么传递指针和传递普通变量前缀不尽相同:
function(int *p){}
mian{
int *p;
function(p); // 而不是function(&p);
}
实质:
int* p = new int[n]; // p是int*类型(一级指针)
max_min(&p); // &p变成int**类型(二级指针)
// 但函数参数要求int* → 类型不匹配
这涉及到:
指针类型层级(以int为例):
int a = 10; // 普通变量
int* p = &a; // 一级指针:存储a的地址
int** pp = &p; // 二级指针:存储指针p的地址
- 这里的操作符关系:
| 表达式 | 类型 | 内存示意 |
|---|---|---|
| a | int | [10] |
| &a | int* | 0x1000(假设地址) |
| p | int* | 0x1000 |
| &p | int** | 0x2000(指针的地址) |
| *p | int | 10 |

浙公网安备 33010602011771号