2014-09-20 80 views
0

我想打印一个二维数组,我从另一种方法获得一个二维数组,看代码:印刷用C

int** getPrint(){ 
    const int EIGHT[7][5] = { 
     { 0, 1, 1, 1, 0 }, 
     { 1, 0, 0, 0, 1 }, 
     { 1, 0, 0, 0, 1 }, 
     { 0, 1, 1, 1, 0 }, 
     { 1, 0, 0, 0, 1 }, 
     { 1, 0, 0, 0, 1 }, 
     { 0, 1, 1, 1, 0 } 
    }; 
    return EIGHT; 
} 

int main(){ 
    int **ptr; 
    ptr = getPrint(); 

    return 0; 
} 

会是什么把它打印出来的最好方法是什么?

+2

无,因为* *有未定义的行为*(返回一个指向局部变量的指针。) – juanchopanza 2014-09-20 12:39:57

+1

循环?而你的代码有UB。 – 2014-09-20 12:46:26

+0

'int **'与int [] []不一样'' – d3L 2014-09-20 13:00:35

回答

0

东西,如下

#include <stdio.h> 

#define N 7 
#define M 5 

const int (* getPrint(void))[M] 
{ 
    static const int EIGHT[N][M] = 
    { 
     { 0, 1, 1, 1, 0 }, 
     { 1, 0, 0, 0, 1 }, 
     { 1, 0, 0, 0, 1 }, 
     { 0, 1, 1, 1, 0 }, 
     { 1, 0, 0, 0, 1 }, 
     { 1, 0, 0, 0, 1 }, 
     { 0, 1, 1, 1, 0 } 
    }; 

    return EIGHT; 
} 

int main(void) 
{ 
    const int (*ptr)[M]; 
    int i, j; 

    ptr = getPrint(); 

    for (i = 0; i < N; i++) 
    { 
     for (j = 0; j < M; j++) printf("%d ", ptr[i][j]); 
     printf("\n"); 
    } 

    return 0; 
} 

或者你可以使用一个typedef。例如

#include <stdio.h> 

#define N 7 
#define M 5 

typedef const int (*ArrayPtr)[M]; 

ArrayPtr getPrint(void) 
{ 
    static const int EIGHT[N][M] = 
    { 
     { 0, 1, 1, 1, 0 }, 
     { 1, 0, 0, 0, 1 }, 
     { 1, 0, 0, 0, 1 }, 
     { 0, 1, 1, 1, 0 }, 
     { 1, 0, 0, 0, 1 }, 
     { 1, 0, 0, 0, 1 }, 
     { 0, 1, 1, 1, 0 } 
    }; 

    return EIGHT; 
} 

int main(void) 
{ 
    ArrayPtr ptr; 
    int i, j; 

    ptr = getPrint(); 

    for (i = 0; i < N; i++) 
    { 
     for (j = 0; j < M; j++) printf("%d ", ptr[i][j]); 
     printf("\n"); 
    } 

    return 0; 
} 
+0

谢谢,我还有一个小问题,“const int(* getPrint(void))[M]”究竟做了什么?我从来没有见过[]方法背后。 – Jazula 2014-09-20 13:16:04

+0

@Jazula它是一个函数声明,它返回一个指向数组的指针。我可以使用typedef,因为它更清晰。 – 2014-09-20 18:22:05