c++数组作形参
void foo(char **arg[3][4]);
void foo(char **(*arg)[4]);
这二者完全相同;
char **arg[10][4];
foo(arg);
传到foo中的数组arg会退化成为指针,该指针指向有四个元素的一块连续内存,每个元素是一个指向指针的指针(便于理解可叫二级指针,虽然不正确)。
此时arg[1]的地址会比arg[0]的地址高16个字节,即4个指针的长度。这也是为什么[4]不能省略成*的原因,c++需要知道这块连续的内存如何截断。
如果
char **(*arg)[4];
arg = (char **(*)[4])malloc(/*size*/);
foo(arg);
这样调用也是可以的。
void foo(char **(*arg)[4]);
这二者完全相同;
char **arg[10][4];
foo(arg);
传到foo中的数组arg会退化成为指针,该指针指向有四个元素的一块连续内存,每个元素是一个指向指针的指针(便于理解可叫二级指针,虽然不正确)。
此时arg[1]的地址会比arg[0]的地址高16个字节,即4个指针的长度。这也是为什么[4]不能省略成*的原因,c++需要知道这块连续的内存如何截断。
如果
char **(*arg)[4];
arg = (char **(*)[4])malloc(/*size*/);
foo(arg);
这样调用也是可以的。
浙公网安备 33010602011771号