小探讨:指针的层级问题

给定一个经典的指针使用案例:

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
posted @ 2025-04-30 17:02  [丘李]Chilllee  阅读(11)  评论(0)    收藏  举报