我想在一个函数中动态分配一个二维数组,并在另一个函数中打印它,但createMapBoard()函数的返回值需要是指向数组地址的指针。以下是我的代码。它编译并打印出来,但仅限于creatMapBoard()函数。它不会在数组中读入printMapBoard(** char)函数,我不知道为什么。如何在一个函数中动态分配一个二维数组并在另一个函数中打印它?
#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'中,你不会动态创建任何东西,而你的变量'ptr'是一个由8个指向'char'指针的8个数组组成的数组,可能不是你想要的。 –
好的,我该如何在createMapBoard函数中动态地分配内存然后呢? – Scarlet
您是否尝试过搜索它?在这个网站上有成千上万的例子,可能是数百万的因特网。尝试输入'c allocate 2d array dynamic例如'到你最喜欢的搜索引擎并检查结果。 –