繁体   English   中英

通过引用传递动态分配的指针数组 C

[英]Passing a dynamically allocated array of pointers by reference C

void parseFile(unsigned *line, char **matrix)
{

  FILE *fp;
  char buff[cols];
  char ***ptr;
  ptr = &matrix;

  fp = fopen("cazino_heist_maffs.csv", "r");
  if (fp == NULL)
  {
    // return 1;
  }

  int i = 0;

  while (fgets(buff, 255, (FILE *)fp) != NULL)
  {
    printf("%d: %s\n", *line, buff);

    for (i = 0; buff[i] != '?'; i++)
    {
      matrix[*line][i] = buff[i];
    }

    (*line)++;
    char **tmp;
    tmp = realloc(matrix, sizeof(matrix) * ((*line) + 1));
    if (tmp == NULL)
    {
      printf("fail");
      // return 1;
    }

    matrix = tmp;
    for (int i = *line; i < (*line) + 1; i++)
    {
      matrix[i] = malloc(100 * sizeof(char *));
    }
  }
  fclose(fp);
}

所以我有这个方法从文件中读取并填充指向 arrays 的指针。function 在方法内部工作但是当我 go 返回到主矩阵时未填充。

  printf("ALL: \n");
  for (unsigned i = 0; i < *line; i++)
  {
    for (unsigned j = 0; matrix[i][j] != '='; j++)
    {
      printf("%c", matrix[i][j]);
    }
    printf("\n");
  }

如果我把它放在 function 里面,它工作正常,但如果我把它放在 main 里,它就不起作用。

   char **matrix;
   matrix = malloc2dArray(rows, cols);

   //
   parseFile(&line, matrix);

这也是我调用该方法的方式。 我假设我按值而不是引用传递我的矩阵,但是我不确定如何使用双指针来传递它。 有什么帮助吗?

要“通过引用”将变量传递给 function,您需要传递它的地址。 您有一个char ** ,这意味着它的地址具有类型char *** 因此,将其设为 function 的参数类型。

void parseFile(unsigned *line, char ***a_matrix)
{
    char **matrix = *a_matrix;
    // do stuff
    *a_matrix = matrix;
}

并传入地址:

parseFile(&line, &matrix);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM