-1

C++ 関数プログラミングに関する簡単な (あなたへの) 質問があります。次の関数を宣言しています。

double Function (double x,
                     double y,
                     double z,
                     double k,
                     double u)
Do things...
double array[1];
return array[0]=value1;
return array[1]=value2;

次に、main(){}両方の値を出力したいと思います。だから、私は行きます:

    double result[1] = {SimpleMonteCarlo(x,
                                  y,
                                  z,
                                  k,
                                  u)};
cout << "the first result is " << result[0] << "\n";
cout << "the second result is" << result[1] << "\n"

ただし、result[0]( array[0]) のみが正しい値を持っているようです。value2 をarray[0]再度設定しても問題ありません。

それを回避する方法について何か考えはありますか?そして最も重要なことは、なぜこれが起こったのですか?

努力してくれてありがとう!:)

4

3 に答える 3

0

関数では、値を 1 つだけ返しています。

double Function (double x,
                     double y,
                     double z,
                     double k,
                     double u) {
//do some stuff
double array[1];
return array[0]=value1;
return array[1]=value2; //this line is never executed... so it can be written in code, but has no effect. Its same as if it were comment out
}

内部配列は問題ありません。ただし、あなたの論理は正しくありません。あなたのコードで

double result[1] = {SimpleMonteCarlo(x,
                                  y,
                                  z,
                                  k,
                                  u)};
cout << "the first result is " << result[0] << "\n";
cout << "the second result is" << result[1] << "\n"

最後の行に問題があります。result[1]決して存在しないvalue を読み取ろうとしています。そして、1つのアイテムだけに配列を持つのは役に立たず、悪い設計です。

于 2013-06-15T18:24:49.563 に答える
0

上記のコードは非常に危険であり、データの破損につながる可能性が最も高いため、スタック上に作成された配列を返します。次のような結果を返すための引数を使用することをお勧めします。

void Function(double x, double y, double output[2])
{
     //Do your calculations
     output[0] = value0;
     output[1] = value1;
}

そして、次のように関数を呼び出します。

double retVal[2];
Function(x, y, retVal);
cout << retVal[0] << retVal[1];

もう 1 つの方法は、関数内のヒープに配列を割り当てて返すことです。ただし、その場合、呼び出し元は配列の割り当てを解除する必要があります (余分なプログラマーの作業と注意が必要です!)。あなたのような単純なケースの私見では、最初のタイプの宣言関数の方が優れています。

于 2013-06-15T18:17:43.110 に答える