【发布时间】:2026-02-24 05:00:01
【问题描述】:
我正在尝试将一个三维数组传递给这样的函数:
void example( double*** bar ) {
// Stuff
}
int main() {
double[3][2][3] foo;
// Initialize foo
example( foo );
return 0;
}
这会导致 gcc 给我“无效的指针类型”。我该怎么做?我可以将整个参数设为一维数组并安排我的数据以适应它,但有没有更优雅的解决方案?
编辑:
另外,我不能总是指定每个子数组的长度,因为它们的大小可能不同。例如:
int* foo[] = { { 3, 2, 1 }, { 2, 1 }, { 1 } };
如果它有帮助,我正在尝试为神经网络中的神经元批量传递输入。每个神经元都有不同数量的输入。
【问题讨论】:
-
关于你问题的第二部分:你可以创建一个函数
void example(int *bar[])并传递foo,但是正确处理bar和正确处理foo一样困难。一种简单的解决方案是在数组中包含一个“停止标记”,例如int* foo[] = { { 3, 2, 1, -1 }, { 2, 1, -1 }, { 1, -1 }, { -2 } };(但请用符号常量替换幻数!) -
如果每个子数组的长度不同,你如何知道它们的长度?
-
您只需处理子数组,直到您达到 -1;无法直接获取子数组的长度,因为该信息在运行时根本不可用,C 不会将其保存在任何地方。
-
我自己保存的。每个神经元保持它所期望的输入数量,所以我使用它。处理所有这些的函数,理论上,我只需要弄清楚如何正确地制作双***
-
请参阅this answer of mine 了解封装尺寸并可传递给函数的结构。
标签: c arrays multidimensional-array