2010年2月27日土曜日

多次元配列を関数に渡す

メモリは一次元なので、多次元配列をそのまま格納することはできない。
サイズの分かっている配列ならば、以下のようにできる。

int func(int (*array)[]) ;
int main()
{
    int array[2][3] ;

    ...

    func(array) ;

    ...

}

int func(int (*array)[])
{
    ...
}

main関数内でサイズを決定するような場合は、一旦一次元化するしかなさそうだ。


int func(int *array, int N, int M) ;
int main()
{
    int i,j ;

    int N = 2 ;
    int M = 3 ;

    int array[N][M] ;

    ...

    int align_array[N*M] ;

    for(i=0; i
        for(j=0; j
            align_array[N*i +j] =array[i][j] ;

    func(array) ;

    for(i=0; i
        for(j=0; j
            array[i][j] =align_array[N*i +j] ;

    ...

    }

int func(int *array, int N, int M)
{
    int array[N][M] ;

    for(i=0; i
        for(j=0; j
            array[i][j] =align_array[N*i +j] ;
    ...

    for(i=0; i
        for(j=0; j
            align_array[N*i +j] =array[i][j] ;

    ...

}

0 件のコメント:

コメントを投稿