C 指向指针的指针
在接下来的时间里面,我们准备为大家介绍"指向指针的指针"。
(1)指向指针的指针:指向,指针数据的,指针变量,称为指向指针的指针。
看完这个解析相信大家都有一种感觉,就是是完全不知道你在说什么,
因为这个内容比较难理解,所以,我们需要结合例子来作进一步的学习。
(2)
例子:
//下面这行代码定义了整型变量数组a,并存放了2个整型值,分别是1,2。
int a[ 2 ] = {1,2};
//下面这行代码首先定义了一个整型指针数组num,
然后,通过运算符&取出数组a[0]、a[1] 的地址分别赋给指针数组num。
int * num [ 2 ] = { &a[ 0 ], &a[ 1 ] };
接下来,我们先看看下面的列表:
变量数组a | 内存地址 | 变量值 |
a[0] | 1000 | 1 |
a[1] | 1001 | 2 |
指针数组num | 内存地址 | 变量值 |
num[0] | 3000 | 1000 |
num[1] | 3001 | 1001 |
变量值1000是通过&a[0]取出的内存地址 |
---|
变量值1001是通过&a[1]取出的内存地址 |
所以,通过上面的列表,我们可以了解到代码 int * num [ 2 ] = { &a[ 0 ], &a[ 1 ] };
就等价于下面的代码,
int * num [ 2 ] = { 1000, 1001 };
接下来,我们就定义一个指向,指针数据,的指针p,代码如下:
int * *p;
现在,我们就定义了一个指向,指针数据,的指针p,而它的格式只是在指针变量定义时多加一个星号。
而现在的指针数据是,指针数组num ,而我们就需要让指针p,指向,指针数据num,所以,我们进行一个
赋值操作就可以了,代码如下:
p = num;
通过代码 p = num 我们就实现了指向一个指针数据num,的指针了,它就是p。
接下来,我们来看看如何使用p,代码如下:
int c = * *p;
在上面这行代码中,我们首先把* * p 分开三个部分来分析:
(1)第一部分,目前,经过代码 p = num 赋值以后,p中的值就是num指针数组在内存中的起始位置,
通过上面的表格,我们可以查看到num数组的起始位置是3000,也就是a[ 0 ] 的内存地址。
(2)第二部分,*p,就是指向3000这个内存地址并取出它的值,通过上面的表格,我们可以
看到,3000这个内存地址中所存放的值是1000,而这个1000是另一个内存地址。
所以,就要再找到内存地址1000中的值,所以,就要再看看第三部分。
(3)第三部分,* *p,现在*p 已经取出了内存地址3000中的值1000,所以,再通过第二个星号
来取出内存地址1000中的值,通过上面的例表,我们可以看出这个地址是属于数组a中
的a[0],所以,它的值是1。
这样,就把1取出来并赋给了变量c。
所以,从这个分析的过程,我们就可以了解到,为什么称p为指向指针的指针,因为,从上面的分析中,
我们可以了解到,第一个星号是要取出3000这个地址中的值,即取出指针3000中的值,所以,这里
是第一次指向指针。
然后,这个3000的指针(地址)中的值是另一个指针(地址)1000,所以,要通过第二个星号
取出指针1000中的值1,所以,这里是第二次指向指针。
而我们将两次指向指针合并在一起,就是指向,指针的指针,即指向3000,再指向1000这个
内存地址。
非常好,现在,我们已经掌握了C中的“指向指针的指针”这个知识点,但是,如何去运行用它呢?所以,我们就要通过下方的按钮进入到游戏中,然后,运用该知识点去完成任务,这样,才可以加深大家对每个知识点的理解和运用,以及“尽快进入到编程的状态”。
不要停留在理论规则上面,快动起来吧!
(通过游戏模式学习与训练,需要在电脑上运行)