9.6 指针数组、指针的指针与main函数参数
9.6.1 指针数组概念回顾
先简单回顾一下前面讲过的指针数组与数组指针。
一个数组,其元素均为指针类型数据,称为指针数组,换句话说,指针数组中的每一个元素都是一个指针变量,指针数组的定义形式如下:

举个例子:

看上面这行代码,因为[]优先级比“*”高,所以p与[4]先结合,构成p[4],这是数组形式,表示有4个元素,然后与前面的“*”结合,“*”表示这个数组是指针类型的,每个数组元素都可以看成是一个指针变量,都可以指向一个整型普通变量。
再看看数组指针。数组指针的定义如下:

这行代码是定义一个指向一维数组的指针变量。也就是说,它首先是一个指针,注意区别指针数组和数组指针,精华的说法就是:以什么结尾它就是什么,“指针数组”是以“数组”这个词结尾,所以本质上是一个“数组”,而“数组指针”是以“指针”这个词结尾,所以本质上是一个“指针”。在这里不多谈数组指针,主要谈一下指针数组。
指针数组有一个比较大的用处,就是比较适合用来指向若干个字符串,使字符串处理更加方便。看看如下范例:

针对上面这个范例,可以绘制如图9.27所示的指针指向示意图。

图9.27 指针数组中指针指向示意图
继续增加一些代码:

现在,如果希望pName[0]不再指向“C++”,而是指向“Java”,希望pName[1]不再指向“Java”而指向“C++”,看看要如何来修改代码:

运行并观察程序运行结果,可以绘制出如图9.28所示的指针指向示意图。

图9.28 指针数组中指针指向示意图