- ベストアンサー
C言語で行列を参照する方法
- C言語で行列を参照する方法について教えてください。
- 自作関数で行列を引数として参照する方法を教えてください。
- C言語での行列の参照方法についてご教授願います。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
void test(double x[][3],double xx[][3]) { int i; for (i=0;i<NUM;i++) { x[i][0] = xx[i][0]; x[i][1] = xx[i][1]; x[i][2] = xx[i][2]; } } void main(void) { double x[NUM][3]; double xx[NUM][3]; /*処理内容略*/ test(x,xx); /*呼び出し*/ /*処理内容略*/ }
その他の回答 (4)
- chie65536(@chie65535)
- ベストアンサー率44% (8742/19840)
ANo.2の >仮引数の >int i[][3] >は >int *i[3] >でもかまいません。 は誤りです。 「int i[][3]」と「int *i[3]」では意味が全然違います。下手に「int *i[3]」に書き替えると、アプリケーションが例外を発生させて強制終了します。 回答者のcyacya2000さんは「配列とポインタ」の理解が足りないようです。
- asuncion
- ベストアンサー率33% (2127/6289)
>仮引数の >int i[][3] >は >int *i[3] >でもかまいません。 本当ですか? iは要素数3の配列へのポインタですので、 int (*i)[3] でないとまずいのでは? カッコがないと、iは要素数3のポインタの配列となり、 本来やりたいことができないと思います。
- cyacya2000
- ベストアンサー率54% (39/71)
2次元配列(ここでいう行列)を引数で受け取るときには、列の大きさを教えてあげる必要があります。 以下に簡単なサンプルを示します。ここでは、列の大きさの3を指定しています。こんなので参考になりますか? #include <stdio.h> void sub(int i[][3]){ int x,y; //表示してみる for(x=0;x<2;x++){ for(y=0;y<3;y++){ printf("i[%d][%d]=%d\n",x,y,i[x][y]); } } //変更してみる for(x=0;x<2;x++){ for(y=0;y<3;y++){ i[x][y]=100; } } } int main(){ int i[2][3]={1,2,3,4,5,6}; int x,y; sub(i); //変更結果を表示してみる for(x=0;x<2;x++){ for(y=0;y<3;y++){ printf("i[%d][%d]=%d\n",x,y,i[x][y]); } } return 0; } 仮引数の int i[][3] は int *i[3] でもかまいません。
- Tacosan
- ベストアンサー率23% (3656/15482)
たとえば void test(double x[NUM][3], double xx[NUM][3]) { /* xx から x にコピー */ } でいいのでは. 呼び出すときは test(x, xx); みたいな感じ.