2014-09-20 47 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