在 中 main()
,变量 \'array\' 声明为
char array[50][50];
这是一段 2500 字节的数据。当 main()
传递 的 \'array\' 时,它是指向该数据开头的指针。它是指向预期按 50 行排列的字符的指针。
但在功能上 printarray()
,你声明
char **array
\'array\' 此处是指向 char *pointer
.
@Lucus 的建议是 void printarray( char array[][50], int SIZE )
可行的,只不过它不是通用的,因为你的 SIZE 参数 必须 是 50。
思路:defeat(yeech)中的参数数组类型 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" );
}
}
更优雅的解决方案是将“数组”制作成 main()
指针数组。
// 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: cleaner alternative syntax
// array = malloc(sizeof *array * SIZE);
// 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: cleaner alternative syntax
// array[row] = malloc(sizeof(**array) * SIZE);
}
// 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);
...