幡然醒悟 、醍醐灌顶。

1.指针的基本运算操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//首先定义一个普通的int 型变量 p
int p = 3
//此时编译器在内存中开辟了一个内存空间p 假设其地址为(OxA1)地址对应的内存空间就存储了p的值3
//此时我们要取得p的地址则只需使用 &
&p == OxA1
//现在我们定义一个指针
int *q;
//因为指针也是存储在内存当中的,假设指针q在内存中的地址为(OxB1)所以我们可以通过&获得指针q在内存中的地址
&q == OxB1
//指针的赋值操作 把p的地址赋给指针q
q = &a;
//此时在指针q的内存空间(OxB1)中存储的是 a的地址(OxA1)

//那我们如何取得指针q中存储的a的地址的值3呢?
//我们可以通过 *q这个操作来实现 *q的含义是取指针q存储的地址所对应的值
*q = 3

//普通变量p和指针q的区别
p == 3
&p == OxA1
q == OxA1
&q == OxB1
*q == 3

2.二级指针

1
2
3
4
5
6
7
8
9
10
11
12
//定义一个二级指针和一个一级指针
int **d;
int *q;
//跟一级指针类似,二级指针在创建的时候编译器也会在内存中创建一个空间,假设地址为(OxC1)所以我们可以通过&获得指针d在内存中的地址,假设指针q在内存中的地址为(OxB1)
&d == OxC1
//二级指针的内存空间存放的是一级指针的地址
d = &q //把一级指针的地址赋给二级指针
d == OxB1 //一级指针的地址
&d == OxC1 //二级指针自身存储地址
*d == OxA1 //根据一级指针中存放的 int型变量 p的地址
**d == 3 //根据一级指针中 p的地址 得到的p的值

本文采用CC-BY-SA-3.0协议,转载请注明出处
作者: Lee