无法将多维数组传递给结构

时间:2017-08-14 10:48:21

标签: c pointers multidimensional-array

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.

2 个答案:

答案 0 :(得分:2)

通过使input成员成为一个简单的指针,您可以非常轻松地解决问题:

float *input;

然后,您可以使每个指针指向相应的Queue

数组
arguments[0].input = Queue[0];
arguments[1].input = Queue[1];

但请注意,Queue的生命周期必须至少,只要arguments的生命周期。如果Queue超出范围,那么指针将会流浪,并且不能再使用。如果Queue超出范围,则需要为input成员创建完整的数组(或为其分配内存),并将内容复制到该内存中。

答案 1 :(得分:0)

2d arraypointer 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
                 +---+---+---+---+