C语言中的“二级指针”该如何理解

在讨论C语言指针时,我一直在强调“将指针看作普通数据类型”,要是读者能够记住这一点,在看到二级指针时,将其与其他普通数据类型对比分析,会发现其实二级指针也没什么难的。

该如何理解这段C语言代码中的 pp 呢?我知道很多人习惯称 pp 为“指针的指针”,如果读者觉得这个说法比较费解,可以暂且不用理会。事实上,按照我一直强调的“将指针看作普通数据类型”这个小技巧,int ** pp 可以分开来看:int* *pp;紧挨着 pp 的 说明 pp 是一个指针,int 则说明它是一个指向 int 型数据的指针。int 型数据也即所谓的指针类型数据,所以 pp 是“指向指针的指针”。

 C语言中的“二级指针”该如何理解_设计制作_电源/新能源

现在再来看:int **pp = &p;就不难理解了,p 则是一个指向 int 型数据的指针, &p 表示 p 的地址,pp 指向该地址,所以有些程序员称 pp 为二级指针。事实上,如果使用 typedef 将 int * 定义为一个普通数据类型:

typedef int* IPTR;再来重写 pp 的C语言定义,一切看起来就和一级指针没什么两样了。

所以如果读者是C语言初学者,不建议纠结一些“专业”的名词,比如“指向指针的指针”,“二级指针”,“多级指针”等,这些文绉绉的词常常会妨碍初学者理解C语言。事实上,多级指针的概念是递归的,读者的C语言基本功如果非常扎实,很容易就可以将多级指针写成“一级指针”。

现在读者应该知道如何分析C语言中的多级指针了,不过可能有些读者仍然会有疑问:C语言的多级指针这么难理解,它有存在的意义吗?

答案当然是肯定的,看了本专栏前面几节文章的读者应该能够发现,借助于结构体和指针,C语言能够完成很多“不可思议”的工作,包括传递各种类型的数据。既然C语言中的指针类型也可看作是“普通数据类型”,那传递指针类型的数据时,C语言就需要指向指针类型数据的指针,也即所谓的“多级指针”。

 C语言中的“二级指针”该如何理解_设计制作_电源/新能源

如果读者觉得“指向指针类型数据的指针”费解,可联想其他普通数据类型,例如“指向int类型数据的指针”。上面的 swap() 函数并不能交换变量 x 和 y 的值,这一点即使是C语言初学者也明白。不过,如果对 swap() 函数稍作修改,答案就不一样了。

修改后的 swap() 的两个参数都是 int 指针,它能够交换 x 和 y 的值了,显然,int 型数据的例子很容易理解。到这里可能有些读者会迷惑,swap() 为什么没有交换 x 和 y 的值呢?它的参数是指针啊?其实,只要使用 IPTR 代替 int * 。swap() 函数需要做适当的修改

应该能够发现,原来我们已经能够自然而然的使用C语言的二级指针了呀,蛤蛤。在处理指针类型数据交换时,指针的指针(所谓的多级指针)自然而言的就被使用了。

10
34
0
98

相关资讯

  1. 1、《4B青年之4楼B座》曝七夕版MV4B青年勇敢宣爱2538
  2. 2、网曝吴磊出演《星汉灿烂》,赵露思为一番女主,番位之争太意外170
  3. 3、《我的播音系女友》发终极预告片汪东城挨板砖63
  4. 4、华夏电影闪耀六一,“潜艇”“哆啦A梦”联手贡献1.12亿4601
  5. 5、老戏骨不受重视?夏雨64岁拿下视帝,细数六十岁以上担正的剧集2119
  6. 6、“李焕英”33亿的巨大票房,贾玲赚了多少?2294
  7. 7、刘佩琦:我不是会挑戏,而是戏会挑我2121
  8. 8、《狄仁杰之四大天王》首日破亿,然而《西虹市首富》是它的两倍!4202
  9. 9、辛芷蕾翟天临绯闻传得沸沸扬扬,一句“闲的”回应吃瓜群众白操心1092
  10. 10、12天破43.51亿,力压唐探3击败复联4,贾玲扯下好莱坞的遮羞布?3464
全部评论(0)
我也有话说
0
收藏
点赞
顶部