在main()
函数中,变量"array"被声明为
char array[50][50];
这是一段2500字节的数据。当main()
中的“array”被传递时,它是指向该数据开头的指针。它是一个指向char的指针,预期按照50行组织。
然而在函数printarray()
中,你声明
char **array
这里的“array”是指向char *pointer
的指针。
@Lucus 建议的 void printarray(char array[][50], int SIZE)
是可行的,但它不够通用,因为您的 SIZE 参数必须为 50。
想法:在 printarray()
中克服(yeech)参数数组的类型。
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()
中的"数组"变成指针数组。
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" );
}
}
char **array;
int SIZE;
array = (char **) malloc(SIZE * sizeof(char*));
for (int row = 0; row<SIZE; row++) {
array[row] = (char *) malloc(SIZE * sizeof(char));
}
for (int row = 0; row<SIZE; row++) {
for (int col = 0; col<SIZE; col++) {
array[row][col] = 'a';
}
}
printarray(array, SIZE);
...
j*SIZE+i
进行索引。 - Davemalloc
)来实现。 - Dave