论 "数组的指针"
在 C 语言中, 多维数组的实现是 "数组的数组".
因此, 定义一个多维数组的指针, 就是定义一个数组的指针, 只不过这个数组的内容是另外的数组.
实参 所匹配的形式参数
数组的数组 char c[8][10]; char (*c)[10]; 数组指针
指针数组 char *c[15]; char **c; 指针的指针
数组指针(行指针) char (*c)[64]; char (*c)[64] 不改变
指针的指针 char **c; char **c; 不改变
个人观点: 凡是数组作为函数参数, 将退化为其同类型的指针.
何为其同类型? 就是这个数组里存放的是什么, 那么其退化后的指针里存放的也得是什么.
你之所以在 main() 函数中看到 char **argv 这样的参数, 是因为 argv 是一个指针数组 (即 char *argv[]). 这个表达式被编译器改写为指向数组第一个元素的指针, 也就是一个指向指针的指针. 如果 argv 参数事实上被声明为一个数组的数组 (也就是 char argv[10][15]), 它将被编译器改写为 char (*argv)[15] (也就是一个字符数组指针), 而不是 char **argv. (Expert C Programming/中/p.225).