以下代码输出第二个数字作为最大值。 如果您需要任何其他信息,请告诉我。
#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;
}
答案 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);
由于Initial
和Secondary
的类型为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;
}
答案 3 :(得分:0)
它们都没有返回实际最大值。
你正在传递指向双打的指针。因此,变量 Min,Max 的值是指向double的地址。
&Max > &Min
...这将比较函数本地变量 Max,Min 的地址。
Max > Min
...这将比较Min和Max指向的地址(只是地址编号)。
*Max > *Min
...这将取消引用指针,并比较它们指向的对象。这就是你想要做的......
return ((double *)((*Max > *Min) ? Max : Min));