原文链接在此
在函数参数中,
extern int func(char **);
和
extern int func(char *[M]);
是代表不同含义的。
前者表示函数期望一个指针,该指针指向一块内存,该内存中包含N个指针,每个指针指向一块内存;这些指针指向的内存可能是连续的,也可能不连续,长度并且不一定相同;其中&a[0][0]和&[1][0]无关系,a[0]==a[0][0],如下例所示:
ptr ------> 0 [ptr] -------> "abcde"
1 [ptr] -------> "another string"
...
N [ptr] -------> "last string"
后者表示函数期望一个指针,该指针指向一块内存,该内存包含N*M个元素,其中(&a[0][0]+M)==&a[1][0]并且(void*)a[0][0]==(void*)a[0]
ptr ------> [0123456789...M][0123.........M]...[0123.........M]