プロが教えるわが家の防犯対策術!

今C言語でプログラミングを書いてるのですが、関数を自作した時に、行列を引数として参照する方法が分からないのでご教授していただきたいです。
main文内でdouble x[NUM][3]と、xx[NUM][3]という変数を定義して、
xx[NUM][3]を計算した後に、それぞれの計算結果をx[NUM][3]に入れるという作業をしています。
そこで、新しくtestという関数を作って、その中でそれぞれ計算したxx[NUM][3]をx[NUM][3]に入れるという作業を行いたいのですが、行列式を引数として参照する方法が分かりません。
ちなみに、NUMはdefineで100と定義しており、xx[NUM][3]はmain文内でforを100回まわして計算しています。

A 回答 (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); /*呼び出し*/
/*処理内容略*/
}
    • good
    • 0

ANo.2の


>仮引数の
>int i[][3]
>は
>int *i[3]
>でもかまいません。
は誤りです。

「int i[][3]」と「int *i[3]」では意味が全然違います。下手に「int *i[3]」に書き替えると、アプリケーションが例外を発生させて強制終了します。

回答者のcyacya2000さんは「配列とポインタ」の理解が足りないようです。
    • good
    • 0

>仮引数の


>int i[][3]
>は
>int *i[3]
>でもかまいません。

本当ですか?
iは要素数3の配列へのポインタですので、
int (*i)[3]
でないとまずいのでは?

カッコがないと、iは要素数3のポインタの配列となり、
本来やりたいことができないと思います。
    • good
    • 0

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]
でもかまいません。
    • good
    • 0

たとえば


void test(double x[NUM][3], double xx[NUM][3])
{
/* xx から x にコピー */
}
でいいのでは. 呼び出すときは
test(x, xx);
みたいな感じ.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!