指针就是地址。把它当成一个地址就好
一级指针
void fun1(int a)
{
a = 10;
}
int b = 0;
void fun2(int *a) //传入一个:int类型的指针,意思是传入一个地址。
{
*a = 10; //解引用,将
a = &b;
}
int x = 1;
fun1(x);//不会改变x的值
int *p = &x;//一但取址,返回的就是这个变量的地址,也就是对应的指针
fun2(p);//会将x的值变成10
二级指针(传入一个指针,改成另一个指针)
int x=0,y=1;
void func(int **a)
{
*a = &y;
**a = 10;//把y变成10
}
int *p = &y; // p 指向 y
func(&p); // 传入 p 的地址
func(int **a) 里的 a、*a、**a
| 表达式 | 类型 | 实际含义 | 当前值 |
|---|---|---|---|
a | int ** | p 的地址(即 &p) | 假设为 0x200 |
*a | int * | 指针变量 p 本身 | &y(假设 0x100) |
**a | int | 最终指向的整数 | y 的值,即 1 |