c - 将指针传递给 C 中的二维指针数组

标签 c arrays multidimensional-array

我已经看到了关于这个主题的其他一些答案,但对它们的理解还不足以解决我的问题。我有一个指向 char 的二维指针数组,我想将其传递给函数。

如果声明数组:char *params[50][50];(50随便挑)

函数原型(prototype)为:void test (char ***results);

我将如何调用该函数?我尝试的一切都以不兼容的指针警告告终

此外,在函数内部引用数组成员的最正确方法是什么?是不是很简单:results[x][y];

谢谢

最佳答案

你不能,指向指针的指针和指向数组的指针是不同的东西。

void test (char *results[50][50]);
void test (char *results[][50]);
void test (char *(*results)[50]);

都是您正在寻找的函数的等价原型(prototype)。

补充:如果你想对维度长度不同的数组使用相同的函数,你必须使用 VLA(可变长度数组)作为函数参数:

void test (size_t n, char *results[n][n]);
void test (size_t n, char *results[][n]);
void test (size_t n, char *(*results)[n]);

这仅在您有符合 C99 的编译器时才有效。

请注意,大小参数出现在数组之前,因此它在那里是已知的。

此外,您不必声明数组本身具有可变长度即可将此功能用于函数参数。但是,如果您小心不要在堆栈上分配大矩阵,否则您可能很容易出现计算器溢出。

关于c - 将指针传递给 C 中的二维指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9872901/

相关文章:

c++ - 链接 libc-dbg 和 libc-prof

c - 循环不起作用

c - OpenSC 与 openCryptoKI

javascript - 如何根据字典中的不同值返回键的值

java - 堆栈ADT(抽象数据类型)实现-数组与链接

c - valgrind 将哪些所有 C 操作视为 'malloc' 和 'free' ?

ruby-on-rails - 如何在rails中将数组保存到数据库

multidimensional-array - 转换 [[T; 的最佳方法是什么? 4]; 3] 变成 [T; 12]?

javascript - Javascript中的多维数组累加和

java - 在不初始化 Java 内部数组的情况下创建数组数组(2D)