【发布时间】:2023-03-03 04:37:02
【问题描述】:
我知道可以通过多种方式将数组传递给函数。
#include <iostream>
#include <utility>
using namespace std;
pair<int, int> problem1(int a[]);
int main()
{
int a[] = { 10, 7, 3, 5, 8, 2, 9 };
pair<int, int> p = problem1(a);
cout << "Max =" << p.first << endl;
cout << "Min =" << p.second << endl;
getchar();
return 0;
}
pair<int,int> problem1(int a[])
{
int max = a[0], min = a[0], n = sizeof(a) / sizeof(int);
for (int i = 1; i < n; i++)
{
if (a[i]>max)
{
max = a[i];
}
if (a[i] < min)
{
min = a[i];
}
}
return make_pair(max,min);
}
我上面的代码只传递了第一个元素,而它应该传递一个数组(或者从技术上讲,一个指向数组的指针),因此,max 和 min 的输出都是 10、10(即仅 a[0]) .
我做错了什么,我想这是正确的方法。
【问题讨论】:
-
n = sizeof(a) / sizeof(int)不会像您认为的那样做。您需要传入 N 或使用非类型模板参数。 -
顺便说一句,如果您启用了合理的警告级别,您的编译器会告诉您问题:coliru.stacked-crooked.com/a/309fb24cde22a907
-
没有调试工作。否决/关闭投票。
-
我意识到这个问题可能是学术问题,但您也可以为此使用
std::minmax_element并完全保护该功能。 See it live. -
谢谢大家,但是一连串的反对票是不值得的。