传递指针数组时的奇怪输出 - C

use*_*694 0 c arrays pointers

我有一个在main中声明的二维指针数组

char* data[3][8]
Run Code Online (Sandbox Code Playgroud)

我把它传递给了一个函数

void func(char*** data)
Run Code Online (Sandbox Code Playgroud)

当我printf("%p\n", data[0]);main函数中和函数中执行时,我0x7ffeabc27640在main和函数中得到了不同的输出(nil).虽然打印只data输出与内部相同的地址main.为什么我不能在函数中访问数组.

Que*_*tin 5

如果你启用一些警告(你应该总是这样做),你会得到:

main.cpp: In function 'main':
main.cpp:6:10: warning: passing argument 1 of 'func' from incompatible pointer type
     func(data);
          ^
main.cpp:2:6: note: expected 'char ***' but argument is of type 'char * (*)[8]'
 void func(char*** data) { (void)data; }
      ^
Run Code Online (Sandbox Code Playgroud)

这告诉你到底出了什么问题,即数组不是指针.取消引用已转换为错误类型的指针是未定义的行为,因此您可以返回任何内容.

char *(*)[8]如果你想给它一个你的功能吗char *(*)[8]

void func(char *(*data)[8]);
Run Code Online (Sandbox Code Playgroud)

或者,如果你想强调它data应该指向数组的第一个元素:

void func(char *data[][8]);
Run Code Online (Sandbox Code Playgroud)

这两种语法完全等效.

注意:文件已命名,main.cpp但确实是在C模式下编译的.