2023年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
無料ブログはココログ

 

« ベタでも愛がこもってるじゃん | トップページ | 今日注文したモノ »

2010年2月22日 (月)

C言語:2次元配列を関数の引数に渡すとき

2次元配列の領域を関数に渡して、そこで値を設定するとき、アドレスを渡す。
んで、今日、失敗したのだけれど、2次元配列だとしても、ポインタのポインタで渡すのは駄目。
mallocで関数に渡して領域を確保するときには、ポインタのポインタにしないと駄目だけど、静的に確保した領域では、2次元配列であっても、その領域の先頭はポインタ1つでしかない。
2次元配列は、1次元の領域がポインタで管理されているのではなくて、[1次元目の配列数]×[2次元目の配列数]の領域が確保されている。

たぶん、以下の様な感じ。

#include <stdio.h>

void func(char *arg)
{
    for(int i=0; 10*20>i; i++)
    {
        *arg= i;
        arg++;
    }
}



int main()
{
    char x[10][20];



    func((char*)x);



    for(int i=0; 10>i; i++)
    {
        for(int j=0; 20>j; j++)
        {
            printf("x[%d][%d]=%d\n", i, j, x[i][j]);
        }
    }
    return 0;
}

イカンな。
こんな初歩の初歩を間違うなんて・・・。

« ベタでも愛がこもってるじゃん | トップページ | 今日注文したモノ »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: C言語:2次元配列を関数の引数に渡すとき:

« ベタでも愛がこもってるじゃん | トップページ | 今日注文したモノ »