如何使用条件语句返回指针?

时间:2012-10-29 10:06:55

标签: c++ pointers conditional-statements

以下代码输出第二个数字作为最大值。 如果您需要任何其他信息,请告诉我。

#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;
}

下一个代码输出第一个数字作为最大值

#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;
}

做错了什么?我只需要最大值,而不是第二个或第一个输入。 我得到了答案。谢谢你们。

这是:

#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 个答案:

答案 0 :(得分:6)

您正在比较地址。正确的方法是:

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

您的版本:

(Max > Min)

比较指针本身,

(&Max > &Min)

比较指针的地址,这又是错误的。

此外,您不需要指针,并注意您可以使用std::max

答案 1 :(得分:6)

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

请注意,我使用*Max*Min代替&Max&Min,即取消引用,而不是取用地址!另请注意,对于已经具有所需类型的表达式,您对double*进行了大量不必要的强制转换。一个exaple是你的ComputeMaximum函数体。另一个例子

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

由于InitialSecondary的类型为double&Initial&Secondary的类型为double*,因此绝对不需要丑陋的不必要的演员。只需使用

max = ComputeMaximum(&Initial,&Secondary);

同样在其他地方。

我强烈建议您阅读a good book on C++

答案 2 :(得分: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)。

答案 3 :(得分:0)

它们都没有返回实际最大值。

你正在传递指向双打的指针。因此,变量 Min,Max 的值是指向double的地址。

&Max > &Min ...这将比较函数本地变量 Max,Min 的地址。

Max > Min ...这将比较Min和Max指向的地址(只是地址编号)。

*Max > *Min ...这将取消引用指针,并比较它们指向的对象。这就是你想要做的......

return ((double *)((*Max > *Min) ? Max : Min));