如何在C语言中在一个函数中动态分配2D数组并在另一个函数中打印它?
我想在一个函数中动态分配一个2D数组并在另一个函数中打印它,但是createMapBoard()函数的返回值需要是指向数组地址的指针。下面是我的代码。它可以编译和打印,但只能从createMapBoard()函数中进行。它不会在数组中读取printMapBoard(**char)函数,我不知道为什么如何在C语言中在一个函数中动态分配2D数组并在另一个函数中打印它?,c,multidimensional-array,printing,project,dynamic-allocation,C,Multidimensional Array,Printing,Project,Dynamic Allocation,我想在一个函数中动态分配一个2D数组并在另一个函数中打印它,但是createMapBoard()函数的返回值需要是指向数组地址的指针。下面是我的代码。它可以编译和打印,但只能从createMapBoard()函数中进行。它不会在数组中读取printMapBoard(**char)函数,我不知道为什么 #include <stdio.h> char **createMapBoard(void); void printMapBoard(char **board); char **des
#include <stdio.h>
char **createMapBoard(void);
void printMapBoard(char **board);
char **destroyMapBoard(char **board);
int main(){
char **board = createMapBoard();
printMapBoard(board);
destroyMapBoard(board);
printMapBoard(board);
return 0;
}
char **createMapBoard(void){
char **ptr[8][8];
int i,j;
char F = 'F';
char K = 'K';
char C = 'C';
char D = 'D';
char B = 'B';
int n = 8;
int m = 8;
for(j=0; j<8; j++){
for(i=0;i<8;i++){
ptr[j][i] = ' ';
}
}
ptr[0][0] = F;
ptr[0][1] = F;
ptr[1][1] = F;
ptr[2][1] = F;
ptr[2][2] = F;
ptr[3][2] = F;
ptr[4][2] = K;
ptr[5][0] = C;
ptr[5][3] = B;
ptr[6][1] = C;
ptr[6][2] = C;
ptr[6][4] = D;
ptr[7][2] = C;
ptr[7][5] = D;
ptr[7][6] = D;
printf("========\n");
for(j=0;j<8;j++){
for(i=0;i<8;i++){
printf("%c",ptr[j][i]);
}
printf("\n");
}
printf("========\n");
printf("\n");
return **ptr;
}
void printMapBoard(char **board){
int j, i;
printf("========\n");
for(j=0;j<8;j++){
for(i=0;i<8;i++){
printf("%c", board[j][i]);
}
printf("\n");
}
printf("========\n");
printf("\n");
}
char **destroyMapBoard(char **board){
free(**board);
free(board);
return 0;
}
#包括
字符**createMapBoard(无效);
无效打印地图板(字符**板);
字符**地图板(字符**板);
int main(){
char**board=createMapBoard();
印刷地图板;
地图板;
印刷地图板;
返回0;
}
字符**createMapBoard(无效){
字符**ptr[8][8];
int i,j;
字符F='F';
字符K='K';
字符C='C';
chard='D';
字符B='B';
int n=8;
int m=8;
对于(j=0;j有一些方法可以在C中创建2D数组。我选择了指针指向指针的方法
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 const int row = 8;
5 const int col = 8;
6
7 char **createMapBoard(void);
8 void printMapBoard(char **board);
9 int destroyMapBoard(char **board);
10
11 int main()
12 {
13 char **board = createMapBoard();
14
15 printMapBoard(board);
16 destroyMapBoard(board);
17
18 return 0;
19 }
20
21 char **createMapBoard(void)
22 {
23
24 char **ptr;
25
26 int i, j;
27
28 char F = 'F';
29 char K = 'K';
30 char C = 'C';
31 char D = 'D';
32 char B = 'B';
33
34 int n = 8; // rows
35 int m = 8; // columns
36
37 ptr = (char **)malloc( row * sizeof(char *) );
38 for (i = 0; i < row; ++i) {
39 ptr[i] = (char *)malloc( col * sizeof(char *) );
40 }
41
42 for (j = 0; j < row; j++){
43 for (i = 0; i < col; i++) {
44 ptr[j][i] = ' ';
45 }
46 }
47
48 ptr[0][0] = F;
49 ptr[0][1] = F;
50 ptr[1][1] = F;
51 ptr[2][1] = F;
52 ptr[2][2] = F;
53 ptr[3][2] = F;
54 ptr[4][2] = K;
55 ptr[5][0] = C;
56 ptr[5][3] = B;
57 ptr[6][1] = C;
58 ptr[6][2] = C;
59 ptr[6][4] = D;
60 ptr[7][2] = C;
61 ptr[7][5] = D;
62 ptr[7][6] = D;
63
64 printf("========\n");
65
66 for (j = 0; j < row; j++) {
67 for (i = 0; i < col; i++) {
68 printf("%c",ptr[j][i]);
69 }
70 printf("\n");
71 }
72
73 printf("========\n");
74 printf("\n");
75
76 return ptr;
77 }
78
79 void printMapBoard(char **board)
80 {
81 int j, i;
82 printf("========\n");
83 for ( j = 0; j < row; j++) {
84 for ( i = 0; i < col; i++) {
85 printf("%c", board[j][i]);
86 }
87 printf("\n");
88 }
89 printf("========\n");
90 printf("\n");
91 }
92
93 int destroyMapBoard(char **board)
94 {
95 int i;
96 for (i = 0; i < col; ++i)
97 free( board[i] );
98
99 free( board );
100
101 return 0;
102 }
1#包括
2#包括
3.
4 const int row=8;
5 const int col=8;
6.
7字符**createMapBoard(无效);
8空白打印地图板(字符**板);
9英寸地图板(字符**板);
10
11 int main()
12 {
13字符**板=createMapBoard();
14
15印刷地图板(板);
16.地图板(板);
17
18返回0;
19 }
20
21字符**createMapBoard(无效)
22 {
23
24字符**ptr;
25
26 int i,j;
27
28字符F='F';
29字符K='K';
30个字符C='C';
31字符D='D';
32字符B='B';
33
34 int n=8;//行
35 int m=8;//列
36
37 ptr=(char**)malloc(row*sizeof(char*);
38表示(i=0;i#include <stdio.h>
#include <stdlib.h>
char * createMapBoard(void);
void printMapBoard(char board[8][8]);
char **destroyMapBoard(char board[8][8]);
int main(){
char (*board)[8] = (char (*)[8])createMapBoard();
printMapBoard(board);
destroyMapBoard(board);
//printMapBoard(board);
return 0;
}
char *createMapBoard(void){
char (*ptr)[8] = (char (*)[8])malloc(sizeof(char) * 8 * 8);
int i,j;
char F = 'F';
char K = 'K';
char C = 'C';
char D = 'D';
char B = 'B';
int n = 8;
int m = 8;
for(j=0; j<8; j++){
for(i=0;i<8;i++){
ptr[j][i] = ' ';
}
}
ptr[0][0] = F;
ptr[0][1] = F;
ptr[1][1] = F;
ptr[2][1] = F;
ptr[2][2] = F;
ptr[3][2] = F;
ptr[4][2] = K;
ptr[5][0] = C;
ptr[5][3] = B;
ptr[6][1] = C;
ptr[6][2] = C;
ptr[6][4] = D;
ptr[7][2] = C;
ptr[7][5] = D;
ptr[7][6] = D;
printf("========\n");
for(j=0;j<8;j++){
for(i=0;i<8;i++){
printf("%c",ptr[j][i]);
}
printf("\n");
}
printf("========\n");
printf("\n");
return (char *)ptr;
}
void printMapBoard(char board[8][8]){
int j, i;
printf("========\n");
for(j=0;j<8;j++){
for(i=0;i<8;i++){
printf("%c", board[j][i]);
}
printf("\n");
}
printf("========\n");
printf("\n");
}
char **destroyMapBoard(char board[8][8]){
free(board);
return 0;
}
|
char ptr[8][8]; // 2D array of chars
char** ptr[8][8]; // 2D array of pointers to pointers to chars
return ptr;
return ** ptr;
char * createMapBoard(void) {
char ptr[8][8];
...
return (char *)ptr;
}
char[8][8] createMapBoard(void) {
char ptr[8][8];
...
return ptr;
}
char * createMapBoard(void) {
char ptr[8][8];
...
return (char *)ptr;
}
char * createMapBoard(void) {
char * ptr = (char *)malloc(sizeof(char) * 8 * 8);
...
return ptr;
}
ptr[i][j] = ' '
char (*ptr)[8] = (char (*)[8])malloc(sizeof(char) * 8 * 8);
void printMapBorad(char board[8][8]) {
...
}