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 № 1void 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, " ");
}