比较 3 个指针C++
Compare 3 pointers in C++
我是指针新手,无法清除代码中的错误。有谁知道为什么我的代码会出现错误?请告诉我指针在这种情况下是如何工作的以及如何修复它。我不知道为什么它不允许我发布文本较少的帖子,所以我添加了这句话。
//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;
}
您的程序有两个问题
int *aa = &a, *bb = &b, *cc = &c;
std::min (max)
的用法是错误的,因为第三个参数应该是比较函子,而不是指针
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错