Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中在一个函数中动态分配2D数组并在另一个函数中打印它?_C_Multidimensional Array_Printing_Project_Dynamic Allocation - Fatal编程技术网

如何在C语言中在一个函数中动态分配2D数组并在另一个函数中打印它?

如何在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

我想在一个函数中动态分配一个2D数组并在另一个函数中打印它,但是createMapBoard()函数的返回值需要是指向数组地址的指针。下面是我的代码。它可以编译和打印,但只能从createMapBoard()函数中进行。它不会在数组中读取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(无效);
无效打印地图板(字符**板);
字符**地图板(字符**板);
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]) {
   ...
}