比较 3 个指针C++

Compare 3 pointers in C++

本文关键字:C++ 指针 比较      更新时间:2023-10-16

我是指针新手,无法清除代码中的错误。有谁知道为什么我的代码会出现错误?请告诉我指针在这种情况下是如何工作的以及如何修复它。我不知道为什么它不允许我发布文本较少的帖子,所以我添加了这句话。

//Sort 3 numbers
#include <iostream>
using namespace std;
void reorder(int *a, int *b, int  *c);
int main()
{
int a, b, c;
cout << "Enter 3 numbers: " << endl;
cin >> a;
cin >> b;
cin >> c;
reorder(&a, &b, &c);
return 0;
}
void reorder(int *a, int *b, int *c)
{
int *aa = &a, *bb = &b, *cc = &c;
int *Max;
int *Mid;
int *Min;
Max = max(*aa, *bb, *cc);
Min = min(*aa, *bb, *cc);
if(Mid != *aa && Mid != *bb)
{
Mid = *cc;
}
if(Mid != *bb && Mid != *cc)
{
Mid = *aa;
}
if(Mid != *cc && Mid != *aa)
{
Mid = *bb;
}
cout << "Sorted: " << Max << " " << Mid << " " << Min << endl;
}
void reorder(int *a, int *b, int *c)
{
int *aa = &a, *bb = &b, *cc = &c;

&a的类型是int**int**不能隐式转换为int *。此程序格式不正确。

Max = max(*aa, *bb, *cc);

max的第三个参数是用于比较前两个参数的函数对象。*cc不是可以调用的东西,因此不能用作第三个参数。

此外,该函数将返回对整数的引用,该整数不可转换为int*


int *Mid;

Mid具有不确定的值。

if(Mid != *aa && Mid != *bb)

在这里,您读取不确定的值。如果程序首先编译,它的行为将是不确定的。

这是程序的修改版本:

#include <iostream>
using namespace std;
void reorder(int *a, int *b, int  *c);
int main()
{
int a, b, c;
cout << "Enter 3 numbers: " << endl;
cin >> a;
cin >> b;
cin >> c;
reorder(&a, &b, &c);
return 0;
}
void reorder(int *a, int *b, int *c)
{
int **aa = &a, **bb = &b, **cc = &c;
int *Max;
int *Mid;
int *Min;
Max = max(max(*aa, *bb), *cc);
Min = min(min(*aa, *bb), *cc);
if(Mid != *aa && Mid != *bb)
{
Mid = *cc;
}
if(Mid != *bb && Mid != *cc)
{
Mid = *aa;
}
if(Mid != *cc && Mid != *aa)
{
Mid = *bb;
}
cout << "Sorted: " << Max << " " << Mid << " " << Min << endl;
}

您的程序有两个问题

  1. int *aa = &a, *bb = &b, *cc = &c;
  2. std::min (max)的用法是错误的,因为第三个参数应该是比较函子,而不是指针