我正在学习 C 语言,在将二维数组的指针传递给另一个函数然后打印二维数组时遇到了麻烦。如能得到任何帮助我将不胜感激。int main( void ){ char array[50][50];...
我正在学习 C,在将二维数组的指针传递给另一个函数然后打印二维数组时遇到了麻烦。如能得到任何帮助我将不胜感激。
int main( void ){
char array[50][50];
int SIZE;
...call function to fill array... this part works.
printarray( array, SIZE );
}
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()
,变量 \'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);
...