char *p[] 是数组,元素类型为字符指针。作变量定义时需要有元素数量,或者有初始化表达式以确定元素数量。char **p 是指针,其指向的一个字符指针。通常用于遍历像上面这样的数组。char (*p)[] 是指针,其指向的是名义上的数组(因为没有具体数组元素数目)。作变量定义时需要明确其所指的数组的元素数目,这对像之后的 p++ 这类操作的结果有决定性影响。通常用于遍历二维数组。以上这三个,作函数参数声明时,方括号内可为空。若为空,则以上三个语义完全相同,C编译器无法对它们进行区别,对应的实参类型都必须是一个指针变量的地址。C99规定,作参数声明时,“指向T的指针”和“T的数组”没有区别。若方括号内指定了具体元素数目,则效果等于变量定义时的效果。再加一个char p[][8],做函数参数声明时 等价于 char (*p)[8]。