论 "数组的指针"


   在 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). 

 

posted @ 2011-07-24 11:36  walfud  阅读(154)  评论(0编辑  收藏  举报