指针数组,本质是数组,其元素是指针。

数组指针,本身是指针,指向数组。

想要解释清除指针数组很容易,可是想要解释清除指针数组很麻烦。还是直接看一下指针数组和数组指针的声明区别(以int为例):

恕我才疏学浅,是在是不知道该怎么解释。理解能力的确有限,无法理解。我只能说怎么记忆了。

  • 数组指针的时候,有小括号,指针运算符优先,表示a是一个指针。然后才是数组运算符,表示声明的是数组型的指针。

  • 指针数组的时候,没有小括号,下表运算符优先,则表示声明的是一个数组,然后才是指针运算符,表示声明的是指针型的数组。

掌握一个原则,在声明变量的时候,编译器是从自定义的【标识符】到系统内定的【数据类型】的顺序来识别语句的。这也很符合人本思想嘛,哈哈!用这个原则来解释前面的定义:

对于数组指针:

  • 编译器先识别到自定义的标识符【a】,说明我们要声明一个叫做【a】的玩意。

  • 那么这个玩意是个啥呢?根据C运算的优先顺序,接下来优先考虑括号。编译器一下就知道了,这个玩意是个指针;

  • 那么指针是个什么指针呢?再来看下标运算符。哦,编译器明白了,原来这个指针是个【数组型指针】;

  • 可是数组又是什么数组呢?最后看到有个int。编译器终于明白了,原来这个数组是个整形数组。

  • 串联起来,就得到a是一个【【整形数组】的指针】。

对于指针数组,类似的:

  • 编译器先识别到自定义的标识符【a】,说明我们要声明一个叫做【a】的玩意。

  • 那么这个玩意是个啥呢?根据C运算的优先顺序,下标比指针运算优先,先考虑下标。编译器一下就知道了,这个玩意是个数组;

  • 那么是个什么数组呢?再根据C的运算优先顺序,接着考虑指针运算符。哦,编译器明白了,原来这个数组是个【指针数组】;

  • 可是指针又是什么指针呢?最后看到有个int。编译器终于明白了,原来这个指针是个整形指针。

  • 串联起来,就得到a是一个【【整形指针】的数组】。

还有更好的理解么?