我有一个在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
.为什么我不能在函数中访问数组.
如果你启用一些警告(你应该总是这样做),你会得到:
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模式下编译的.