Trong main(), những "mảng" biến được khai báo là
char array[50][50];
Đây là một mảnh 2500 byte dữ liệu. Khi chính ('mảng') 's được truyền về, nó là một con trỏ đến đầu của dữ liệu đó. Nó là một con trỏ đến một char dự kiến sẽ được tổ chức tại dãy 50.
Tuy nhiên, chức năng printarray(), bạn khai báo
char **array
"mảng" ở đây là một con trỏ đến một "char * con trỏ" .
@Lucus gợi ý của "void printarray (char array [] [50], int SIZE)" công trình, ngoại trừ việc nó không phải là chung chung trong đó tham số SIZE bạn phải được 50.
Idea: đánh bại (yeech) loại mảng tham số trong 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");
}
}
Một giải pháp thanh lịch hơn là làm cho mảng "" thành một mảng con trỏ chính.
// 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);
...
trống printarray (mảng char [] [50], int SIZE) – Lucas
Mặc dù có thể làm điều này, bạn nên chuyển đổi nó vào một mảng 1D và sử dụng 'j * SIZE + i' để lập chỉ mục nó. – Dave
@Lưu tại sao? ............................... (chỉ cần điền) – kotlomoy