C-传递3d数组,分配和填充

时间:2013-07-29 11:58:18

标签: c arrays

假设我有以下功能。

void function createBands(boolean option) {
  int i, j;
  int ***bands = (int ***)malloc((SIZE + 1) * sizeof(int **));
  for (i = 0; i < SIZE; i++) {
    bands[i] = (int **)malloc(HEIGHT * sizeof(int *));
    for (j = 0; j < HEIGHT; j++)
      bands[i][j] = (int *)malloc(WIDTH * sizeof(int));
  }
  iterator *it =
      createIterator(params); // do not be confused it is a structure with
                              // methods andaeribute just like Iterator class in
                              // java . Methods are poniters to functions.
  repare_array(bands[Size], it);
}
void prepare_array(int **band, iterator *it) { read_array(band, it); }

read_array(int **band, iterator *it) {
  for (int i = 0; i < Height; i++)
    band[i] = (int *)it->next();
}

// Now in Iterator.c  I have the iterator structure with the methods etc I will
// write just some line form iterator.

void *next() {
  byte *b =
      a function that reads bytes form a file and returns byte * CORECTLY !!!;
  return b == NULL ? NULL : bytetoT(b);
  // this function make void form byte conversion but it doesnt work so I make
  // only a cast in read_aray as you see. SUppose just return b wich is byte(i
  // know in C isn't any byte but I redeclared all the types to be JAVA.)
}

问题是我应该分配波段的地方,因为在这种情况下,按函数返回的1D向量是可以的,因为我看到了函数范围中的值。但是当它返回到数组[i]时,我得到了一个未分配的3dVector。 我需要用数据形式b来接收带[size] [i] [j]。在b中数据是好的,然后我把gote band null。 到目前为止,我做了另一个分配准备aray,然后调用read_array,我分配** band然后我有一些结果,但我不自信。 对困惑感到抱歉!每一条评论对我都有好处。也许我所做的就是好,我不知道! 我不是C的新手我只是长时间不使用指针。

1 个答案:

答案 0 :(得分:0)

如果是2D指针(**),则必须为其分配2D数组的地址,如果是1D数组,则必须为其分配1D数组的地址。

对于read_array函数

             read_array(int**array...)
              {
               for(i=0;i<HEIGHT(the same as in allocation);i++)
                  `enter code here`array[i] = function();//function return an 1D array 
              }

确保function()返回1D数组的地址。