W main(), zmienna "array" została zadeklarowana jako
char array[50][50];
To jest 2500 bajt danych. Kiedy przekazywana jest tablica główna(), jest to wskaźnik do początku tych danych. Jest to wskaźnik do char oczekiwanego być zorganizowane w rzędach 50.
Jeszcze w funkcji printarray(), to oświadczam
char **array
„tablicę” tu jest wskaźnik do char * „wskaźnik” .
@Lucus sugestia "void (tablica char [] [50], int rozmiar) printarray" działa, chyba że nie jest nazwą, że parametr SIZE musi być 50.
Idea: obejścia (yeech) rodzaj tablicy parametrów w printarray()
void printarray(void *array, int SIZE){
int i;
int j;
char *charArray = (char *) array;
for(j = 0; j < SIZE; j++){
for(i = 0; i < SIZE; i ++){
printf("%c ", charArray[j*SIZE + i]);
}
printf("\n");
}
}
bardziej eleganckie rozwiązanie, aby „wachlarz” w głównej() tablicy wskaźników.
// Your original printarray()
void printarray(char **array, int SIZE){
int i;
int j;
for(j = 0; j < SIZE; j++){
for(i = 0; i < SIZE; i ++){
printf("%c ", array[j][i]);
}
printf("\n");
}
}
// main()
char **array;
int SIZE;
// Initialization of SIZE is not shown, but let's assume SIZE = 50;
// Allocate table
array = (char **) malloc(SIZE * sizeof(char*));
// Note: alternative syntax
// array = (char **) malloc(SIZE * sizeof(*array));
// Allocate rows
for (int row = 0; row<SIZE; row++) {
// Note: sizeof(char) is 1. (@Carl Norum)
// Shown here to help show difference between this malloc() and the above one.
array[row] = (char *) malloc(SIZE * sizeof(char));
// Note: alternative syntax
// array[row] = (char *) malloc(SIZE * sizeof(**array));
}
// Initialize each element.
for (int row = 0; row<SIZE; row++) {
for (int col = 0; col<SIZE; col++) {
array[row][col] = 'a'; // or whatever value you want
}
}
// Print it
printarray(array, SIZE);
...
void printarray (tablica char [] [50], int SIZE) – Lucas
Choć możliwe jest, aby to zrobić, jesteś lepiej przekształcenie go do tablicy 1D i korzystania 'j * SIZE + i', aby go zaindeksować. – Dave
@Dlaczego? ............................... (just filler) – kotlomoy