*作为定义的时候,是一个左结合操作符,优先跟其左边的描述相结合
int * : 整型指针
(*p) : 用括号调整优先级,强迫其与p作结合,表示p是一个指针类型(否则此处p应与"()"结合作为一个函数,而该"*"则应跟左边的"int *"结合作为"int **"整型指针的指针)
如此,相应的我们就很容易解释其他的如:
int * 整型指针
int ** 整型指针的指针
int * a[n] 整型指针数组
int (*a)[n] 整型数组的指针
int (*a)(int) 需求整型参数且返回整型数的函数指针
...
搞懂了符号优先级就很容易理解了,另外有些符号优先级是跟编译器有关的,即标准中未定义行为(UNDEFINED BEHAVIOR),尽量不要在程序中使用这种语法。