将矩阵传递给C中的方法

时间:2015-11-21 23:54:28

标签: c pointers matrix dynamic

我有一个基于变量创建的矩阵。我似乎无法为我创建的函数传递此矩阵。

通过OpenMPI收到Num和rank。

我得到的错误类似于'期待'int **'但参数类型为'int(*)[(sizetype)(num)]''

这就是我所拥有的:

int gHolder(int** spanningTree, int size, int id, int token){
  if( size == 0 ) return -1;
  if( id < 0 || id >= size || token < 0 || token >= 0) return -1; 
  if(token == id) return id;

  int j;
  int holder;
  for(j = 0; j<size; j++){
    if(spanningTree[id][j] == 1){
      holder = gHolder(spanningTree, size, j, token);
      if(holder != -1) return j;
    }
  }
  return -1;
}

int main(int argc, char * argv[]) {
    int rank;
    int num;
    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &num);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    int mat[num][num];
    int tokenHolder = 7;
    mat[0][1] = 1;
    mat[0][2] = 1;
    mat[1][0] = 1;
    mat[2][0] = 1;
    mat[2][3] = 1;
    mat[2][4] = 1;
    mat[3][2] = 1;
    mat[4][2] = 1;
    mat[4][5] = 1;
    mat[4][6] = 1;
    mat[5][4] = 1;
    mat[6][4] = 1;
    mat[6][7] = 1;
    mat[6][8] = 1;
    mat[7][6] = 1;
    mat[8][6] = 1;
    holder = gHolder(mat, num, rank, tokenHolder); 

1 个答案:

答案 0 :(得分:0)

您未正确宣布spanningTree。您需要更改参数顺序,然后可以将其声明为:

int gHolder(int size, int spanningTree[size][size], int id, int token)

或:

int gHolder(int size, int (*spanningTree)[size], int id, int token)

size声明需要在引用之前。