int p(int);
  这里是()的另一个作用。
  这里的()是函数调用运算符,()内写清了参数列表,所以,p是一个函数,函数有一个整型变量的参数,函数返回值为整型。
  int p(int, int *, int);
  分析过程同上一点,直接给出结果。
  p是一个函数,有三个参数,依次为整型、指向整型的指针和整型,返回值为整型。
  int **p;
  C++中没有**这种的运算符,所以这种写法是等同于int *(*p);的。
  其表示,p是一个指针,指向了一个指针变量,且被p指向的那个指针指向整型。
  这种指针称作二级指针,类似的,还有多级指针,但在实际编写程序时,二级指针的使用已经比较少了,多级指针更是几乎(不代表没有用处)不会使用,所以初学者不必考虑多级指针。
  int (*p)(int *, int);
  p是一个指针,指向了一个函数,这个函数的参数列表为(int *, int),返回值为int。
  这里的p,我们称之为函数指针,因为它指向了函数。函数指针的概念需要实际练习几次才能初步掌握。
  void (*p[SIZE])(int *, int);
  这种复杂程度的类型定义是程序中经常见到的,所以一点一点地来分析。
  p先与[]结合,说明p是一个数组;再与左侧的*结合,说明数组里的元素都是指针;之后与右侧的函数调用运算符()结合,那些指针指向的函数的参数依次为(int *, int),返回值类型为void。所以,再整理一下刚刚的分析:
  p是一个由SIZE个元素构成的数组,每个元素都是函数指针,其指向的函数的参数依次为指向整型的指针、整型,返回值类型为void。
  这种类型要求重点掌握。
  int *(*p(int))[SIZE];
  这种类型的可以先跳过,在确认了掌握了上面讲述的所有定义后再来尝试理解。
  从p开始分析,先与()结合,说明p是一个函数;然后进入到参数列表中,发现这个函数的参数只一个int;再看p左侧的*,说明这个函数的返回值是一个指针;之后到外层(这里外层的()是为了强制改变优先级),先与[]结合,说明函数返回的指针指向的是一个数组;再与左面的*结合,说明指向的数组中的元素都是指针;后与int结合,说明数组中的元素指向整型。
  所以,p是一个参数为一个int、且返回一个指向由SIZE个int *构成的数组的的指针的函数。
  <code>    这里思考,如果去掉外层的`()`,即改为如下:
  `int **p(int)[SIZE];`
  会是什么结果?为什么?欢迎在之后的讨论区发表意见。
  </code>
  三、结语
  常用的指针类型(或者直接说是类型)定义大多都是如上类型的变种,当然会有更复杂的,不过再复杂的都可以用上述的方法来进行分析。