c使用辅助函数填充二维数组

时间:2013-11-04 19:52:26

标签: c

我一直遇到分段错误:

#define MATRIX_SIZE 50

void fill_matrix(char *pointer[], char c) {
  int i, j;
  for (i = 0; i < MATRIX_SIZE; i++) {
    for (j = 0; j < MATRIX_SIZE; j++) {

      // tried many syntaxes

      // *(*(pointer + i) + j) = c;
      // *(pointer + i)[j] = c;
      // pointer[i][j] = c;
    }
  }
}

int main(int argc, char *argv[]) {
  char matrix[MATRIX_SIZE][MATRIX_SIZE];
  fill_matrix(&matrix, ' ');
}

如何通过辅助方法访问2D数组?指针令我困惑!

4 个答案:

答案 0 :(得分:2)

只需将您的函数声明为:

void fill_matrix(char matrix[MATRIX_SIZE][MATRIX_SIZE], char c);

然后像这样调用它

fill_matrix(matrix, ' ');

答案 1 :(得分:1)

您将函数传递给与您声明的对象不同的对象。您声明的是二维数组。该函数所期望的是一个指向一维数组的指针数组。你无法无缝地将一个投入另一个。要修复你应该让fill_matrix()采用2-dim数组(具有所有特定于C的特性)或将matrix分配为指针数组。

答案 2 :(得分:1)

您的函数应使用您在main中定义的相同类型的数组:

#define MATRIX_SIZE 50

void fill_matrix(char pointer[][MATRIX_SIZE], char c) {
  int i, j;
  for (i = 0; i < MATRIX_SIZE; i++) {
    for (j = 0; j < MATRIX_SIZE; j++) {

      pointer[i][j] = c;
    }
  }
}

int main(int argc, char *argv[]) {
  char matrix[MATRIX_SIZE][MATRIX_SIZE];
  fill_matrix(matrix, ' ');
}

答案 3 :(得分:1)

void fill_matrix(char pointer[][MATRIX_SIZE], char c) {

会起作用,但如果你想要一个指针样式:

#define MATRIX_SIZE 50

void fill_matrix(char (*pointer)[MATRIX_SIZE], char c) {
  int i, j;
  for (i = 0; i < MATRIX_SIZE; i++) {
    for (j = 0; j < MATRIX_SIZE; j++) {
      pointer[i][j]= c;
    }
  }
}

int main(int argc, char *argv[]) {
  char matrix[MATRIX_SIZE][MATRIX_SIZE];
  fill_matrix(matrix, ' ');
}

请注意,无需使用&传递数组

另请注意,在这种情况下,您不需要辅助函数,

memset(matrix, ' ', sizeof matrix);

将完成工作