2

The following code outputs the second number as the maximum. If you need any other information please let me know.

#include <iostream>                                                     
#include <cstdlib>
using namespace std;
double *ComputeMaximum(const double *Max, const double *Min);

double *ComputeMaximum(const double *Max, const double *Min)
{
    return ((double *)((&Max > &Min) ? Max : Min));
}

int main(void)
{
    double *max;
    double Initial, Secondary;


    cout << "Enter the number followed by space then another number: ";
    cin >> Initial;
    cout << "\nIn-" << Initial;
    cin >> Secondary;
    cout << "\nSe-" << Secondary;
    //cout >> "Of " >> Inital >> "and " >> Secondary;
    //cout >> "the maximum is " >>
    max = ComputeMaximum((double*)&Initial,(double*)&Secondary);
    cout << "\nmax" << *max;
    return 0;
}

The next code outputs the first number as the maximum

#include <iostream>                                                     
#include <cstdlib>
using namespace std;
double *ComputeMaximum(const double *Max, const double *Min);

double *ComputeMaximum(const double *Max, const double *Min)
{
    return ((double *)((Max > Min) ? Max : Min));  // Here is the difference(& missing)
}

int main(void)
{
    double *max;
    double Initial, Secondary;


    cout << "Enter the number followed by space then another number: ";
    cin >> Initial;
    cout << "\nIn-" << Initial;
    cin >> Secondary;
    cout << "\nSe-" << Secondary;
    //cout >> "Of " >> Inital >> "and " >> Secondary;
    //cout >> "the maximum is " >>
    max = ComputeMaximum((double*)&Initial,(double*)&Secondary);
    cout << "\nmax" << *max;
    return 0;
}

What is being done wrong? I only need the maximum, not the second or first input. I got the answer. Thank YOu all.

Here it is:

#include <iostream>                                                     
#include <cstdlib>
using namespace std;
double *ComputeMaximum(const double *Max, const double *Min);

double *ComputeMaximum(const double *Max, const double *Min)
{
    return (double*)((*Max > *Min) ? Max : Min);
}

int main(void)
{
    double *max;
    double Initial, Secondary;


    cout << "Enter the number followed by space then another number: ";
    cin >> Initial;
    cout << "\nIn-" << Initial;
    cin >> Secondary;
    cout << "\nSe-" << Secondary;
    //cout >> "Of " >> Inital >> "and " >> Secondary;
    //cout >> "the maximum is " >>
    max = ComputeMaximum(&Initial, &Secondary);
    cout << "\nmax" << *max;
    return 0;
}
4

4 に答える 4

6

住所を比較しています。正しい方法は次のとおりです。

double *ComputeMaximum(const double *Max, const double *Min)
{
    return *Max > *Min ? Max : Min;
}

あなたのバージョン:

(Max > Min)

ポインタ自体を比較し、

(&Max > &Min)

ポインターのアドレスを比較しますが、これも間違っています。

また、ポインターは必要ありませんstd::max。使用できるポインターがあることに注意してください。

于 2012-10-29T10:08:26.380 に答える
6
double *ComputeMaximum(const double *Max, const double *Min)
{
    return *Max > *Min ? Max : Min;
}

*Maxand*Minの代わりに&Maxandを使用したことに注意してください&Min。つまり、アドレスを取得しない逆参照です。double*また、すでに目的の型になっている for 式への不必要なキャストがたくさんあることにも注意してください。1 つの例は、ComputeMaximum 関数本体です。もう一つの例

max = ComputeMaximum((double*)&Initial,(double*)&Secondary);

InitialandSecondaryは typeであるためdouble&Initialand&Secondaryはtype でdouble*あるため、い不要なキャストはまったく必要ありません。使うだけ

max = ComputeMaximum(&Initial,&Secondary);

他の場所でも同様です。

C++ に関する優れた本を読むことを強くお勧めします。

于 2012-10-29T10:08:28.817 に答える
3

そもそもなぜポインタを使うのですか?それも必要ありません。

以下は、より良い実装です。

double ComputeMaximum(double a, double b)
{
    return a > b ? a : b;
}

または、次のようなことをしたい場合:

ComputeMaximum(x,y) = 100; //modify the one which is maximum

次に、参照が必要です:

double & ComputeMaximum(double & a, double & b)
{
    return a > b ? a : b;
}

ところで、標準ライブラリのstd::max(および)を見たいと思うかもしれません。std::min

于 2012-10-29T10:09:24.000 に答える
0

どちらも実際の最大値を返しません。

doubleへのポインタを渡しています。したがって、変数Min、Maxの値は、doubleを指すアドレスです。

&Max > &Min...これにより、関数にローカルな変数Max、Minのアドレスが比較されます。

Max > Min...これにより、最小値と最大値が指すアドレスが比較されます(アドレス番号のみ)。

*Max > *Min...これにより、ポインターが逆参照され、ポインターが指しているオブジェクトが比較されます。これはあなたがしたいことです...

return ((double *)((*Max > *Min) ? Max : Min));
于 2012-10-29T10:12:07.287 に答える