char **和char *[M]有什么区别?

来源:互联网 发布:java 对象equals方法 编辑:程序博客网 时间:2024/05/16 01:45

原文链接在此


在函数参数中,

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]