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;
}
イカンな。
こんな初歩の初歩を間違うなんて・・・。
« ベタでも愛がこもってるじゃん | トップページ | 今日注文したモノ »
コメント