【发布时间】:2017-10-08 17:49:37
【问题描述】:
我想在一个函数中动态分配一个二维数组并在另一个函数中打印,但是 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 个数组组成的数组,其中包含 8 个指向char的指针。可能不是你想要的。 -
好的,那如何在createMapBoard函数中动态分配内存呢?
-
你试过搜索吗?仅在此站点上就有数千个示例,可能在整个 Internet 上都有数百万个示例。尝试在您喜欢的搜索引擎中输入
c allocate 2d array dynamically example并查看结果。 -
指针指向二维数组的示例,如this
标签: c multidimensional-array printing project dynamic-allocation