1

我不断收到分段错误:

#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, ' ');
}

辅助方法应该如何访问二维数组?指针让我感到困惑!

4

4 回答 4

2

只需将您的功能声明为:

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

然后这样称呼它

fill_matrix(matrix, ' ');
于 2013-11-04T19:57:25.260 回答
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);

会做的工作

于 2013-11-04T20:00:20.220 回答
1

您正在向函数传递一个与您声明的对象不同的对象。您声明的是一个二维数组。该函数所期望的是一个指向一维数组的指针数组。你不能无缝地将一个转换成另一个。要解决此问题,您应该使用fill_matrix()2-dim 数组(具有所有 C 特定的特质)或将您matrix的数组分配为指针数组。

于 2013-11-04T19:56:17.113 回答
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, ' ');
}
于 2013-11-04T19:57:05.783 回答