我一直遇到分段错误:
#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数组?指针令我困惑!
答案 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);
将完成工作