好的,所以这是交易。我已经在这个问题上工作了几天,并尝试了所有可用的资源。就在今天早上,我把我的最后一次电子邮件发给了我的教授,但我想在等待他的答案的同时继续努力。我应该返回一个指向0到1410之间的随机数组中的最小值的指针,通过指针算法分配它们(让这部分工作得很好)。有一个骨架文件包含在分配中,但我喜欢从头开始构建东西(当然使用他的参数)。这是我的代码:
#include <iostream>
#include <cstdlib>
using namespace std;
int* find_smallest_number(int*, int);
int main()
{
const int size = 10;
int random_array[size] = {};
int* smallestNumber = find_smallest_number(random_array, size);
srand(time(NULL));
for(int i = 0; i < size; i++)
{
*(random_array + i) = rand()%1410;
cout << random_array[i] << endl;
cout << &*(random_array + i) << endl;
}
cout << "The smallest number is " << *smallestNumber << endl;
return 0;
}
int* find_smallest_number(int *random_array, int size)
{
/*
for(int i = 0; i < size; i++)
{
if(*(random_array + i) > *(random_array + 1))
{
return *(random_array + i);
}
else if(*(random_array + i) < *(random_array + 1))
{
return *(random_array+1);
}
} */
return &min_element;
}
老实说,我不能告诉你我尝试了多少种不同的方法。这只是最近的一次尝试(所有这些都以[headdesk]的大量结束而告终)。你们可以提出任何提示或提示让我尝试?我已经尝试创建另一个变量来保存值/地址,我尝试了许多不同的比较方法,就像我现在所知道的那样(这个min_element是我在互联网上找到的东西)。我偶尔会得到我的代码来编译,但是当我这样做时,它只会返回数组中FIRST元素的值/地址(无论我的代码是什么样的)。如果我试图返回一个指针它会生气并告诉我“无效转换从int到int *”请帮助我? (另外,对不起,如果我的代码格式有点偏差,我试着按照说明进行操作,但也可能失败了:/)
答案 0 :(得分:2)
嗯,首先,为什么在填充数组之前调用最小的数字?它应该是:
srand(time(NULL));
for(int i = 0; i < size; i++)
{
*(random_array + i) = rand()%1410;
cout << random_array[i] << endl;
cout << &*(random_array + i) << endl;
}
//move the call after you populate the array
int* smallestNumber = find_smallest_number(random_array, size);
其次,函数中的代码应该是:
int* find_smallest_number(int *random_array, int size)
{
int* minPtr = random_array;
for(int i = 1; i < size; i++)
{
if ( *(random_array + i) < *minPtr )
minPtr = random_array + i;
}
return minPtr;
}
这样,您返回一个指向数组中确切元素的指针。你的变种:
return &min_element;
建议你返回一个局部变量的地址,这是未定义的行为。
答案 1 :(得分:1)
不要重新发明轮子,请使用std::min_element
:
#include <algorithm> //must include this
int* minValue = std::min_element(array, array+size);
另外,请确保先填充数组,然后使用std::min_element
,如上所示。
看来你需要非常好的C ++入门书。从这个列表中获取介绍性书籍。
答案 2 :(得分:1)
在您使用随机值填充之前,您似乎正在尝试查找数组中的最小数字。您需要首先初始化数组 ,然后找到最小的值。