/ / c wypełnij tablicę dwuwymiarową za pomocą funkcji pomocniczej - c

c wypełnij dwuwymiarową tablicę za pomocą funkcji pomocnika - c

Ciągle otrzymuję błąd segmentacji:

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

Jak uzyskać dostęp do tablic 2D metodami pomocniczymi? Wskaźniki wprowadzają mnie w błąd!

Odpowiedzi:

1 dla odpowiedzi № 1
void fill_matrix(char pointer[][MATRIX_SIZE], char c) {

będzie działać, ale jeśli chcesz styl wskaźnika:

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

Pamiętaj, że nie ma potrzeby korzystania & przekazać tablicę

Zauważ również, że w tym przypadku nie potrzebujesz funkcji pomocniczej,

memset(matrix, " ", sizeof matrix);

wykona pracę


2 dla odpowiedzi nr 2

Po prostu zadeklaruj swoją funkcję jako:

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

i nazwij to tak

fill_matrix(matrix, " ");

1 dla odpowiedzi nr 3

Przekazujesz do funkcji inny obiekt niż ten, który zadeklarowałeś tablica dwuwymiarowa. Oczekuje się funkcji tablica wskaźników do jednowymiarowych tablic. Możesz „rzucić się bez przeszkód fill_matrix() weź 2-dim tablicę (ze wszystkimi specyficznymi cechami C) lub przydziel swoją matrix jako tablica wskaźników.


1 dla odpowiedzi nr 4

Twoja funkcja powinna używać tablicy tego samego typu, w której definiujesz 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, " ");
}