创建一个void *数组,每个指向2d int Matrix?

时间:2014-12-03 10:13:02

标签: c arrays pointers matrix

我想创建一个void* s的动态数组,每个void*将指向2d int矩阵。

所有矩阵都具有相同的行数和列数。

如何在C中执行此操作?

初始化后我该怎么办:void **myArray = NULL;

更具体地说,我想创建一个带有2个参数的函数:

int foo( void* matrix, void** ptrArray)

matrix指向2d int矩阵,ptrArray指向void* s数组,foo返回ptrArray的大小}。

我希望fooint获取2d matrix矩阵并对其进行一些操作,例如在其中切换一些数字。对于我所做的每一个更改,我想分配一个新矩阵,并在ptrArray中保存指向它的指针。

2 个答案:

答案 0 :(得分:0)

您必须动态分配每个矩阵。

出于示例的目的,我将假设您将“2d int矩阵”创建为线性16 int数组。

#define MATRIX_SIZE 16

int foo(void* matrix, void** ptrArray){
    assert(ptrArray == NULL);

    int result = 0;
    int* first = malloc(MATRIX_SIZE * sizeof(int));

    //do stuff to matrix
    for(int i = 0; i < MATRIX_SIZE; ++i){
        first[i] = matrix[i];
    }
    ptrArray = malloc((++result) * sizeof(void*));
    ptrArray[0] = (void*)first;

    int* second = malloc(MATRIX_SIZE * sizeof(int));

    //do stuff to matrix
    for(int i = 0; i < MATRIX_SIZE; ++i){
        second[i] = matrix[i];
    }
    ptrArray = realloc((++result) * sizeof(void*));
    ptrArray[1] = (void*)second;
    .
    .
    .
    return result;
}

答案 1 :(得分:0)

假设您在其他地方分配了void ** twodarray,并将NULL放在此数组的最后一个+ 1元素中。

我想你想做这样的事情;

  int function(void **twodarray,void **ptrarray)
  {
  int i=0
  for(i=0;twodarray[i]!=NULL;i++)/*repeat till twodarray points to NULL*/
  {
      perform some operation on twodarray[i];
      ptrarray[i]=twodarray[i];
  }
  return i+1;/*return length of ptrarray */
  }

通过这种方式,您可以判断出有没有矩阵。 但是你必须通过其他回复中解释的方法来计算void ** twodarray的分配。