Queue[2][1025]
我的多维数组是Queue[0][0]
。我试图将"error: incompatible types when assigning to type ‘float **’ from type ‘float’"
和Queue [1] [0]传递给我的参数结构。它给了我QueueSize[0]
错误。作为一名新手程序员,我尝试了很多变化,但仍然无法弄清楚如何通过它们。
顺便说一下,Act X <-> (Act A <-> Act B <-> Act C) --> Act X.
是一个整数,其值为1025.
答案 0 :(得分:2)
通过使input
成员成为一个简单的指针,您可以非常轻松地解决问题:
float *input;
然后,您可以使每个指针指向相应的Queue
:
arguments[0].input = Queue[0];
arguments[1].input = Queue[1];
但请注意,Queue
的生命周期必须至少,只要arguments
的生命周期。如果Queue
超出范围,那么指针将会流浪,并且不能再使用。如果Queue
超出范围,则需要为input
成员创建完整的数组(或为其分配内存),并将内容复制到该内存中。
答案 1 :(得分:0)
2d array
和pointer to pointer
之间存在很大差异。
在你的结构中是pointer to pointer
,所以你必须像
arguments[0].input = malloc(sizeof(float *) * num_of_rows);
for (int i = 0; i < num_of_rows; i++)
{
arguments[0].input[i] = malloc(sizeof(float) * num_of_cols);
}
别忘了释放所有已分配的内存。您可以使用valgrind来检查内存泄漏。
2D array
是内存中的字节序列
0 1 2 3
+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 // begins on address 1000
+---+---+---+---+
| 0 | 0 | 0 | 0 | 1 // begins on address 1004
+---+---+---+---+
| 0 | 0 | 0 | 0 | 2 // begins on address 1008
+---+---+---+---+
| 0 | 0 | 0 | 0 | 3 // begins on address 1012
+---+---+---+---+
while指针数组,其中每个指针都可以指向内存的另一部分
0 1 2 3
+---+---+---+---+
| * | * | * | * |
+---+---+---+---+
| | | |
| | | | 0 1 2 3
| | | | +---+---+---+---+
| | | -> | 0 | 0 | 0 | 0 | // begins on address 1000
| | | +---+---+---+---+
| | -----> | 0 | 0 | 0 | 0 | // begins on address 2
| | +---+---+---+---+
| ---------> | 0 | 0 | 0 | 0 | // begins on address 3045
| +---+---+---+---+
-------------> | 0 | 0 | 0 | 0 | // begins on address 128
+---+---+---+---+