将min值作为函数的指针返回

时间:2012-03-11 16:06:09

标签: c++

好的,所以这是交易。我已经在这个问题上工作了几天,并尝试了所有可用的资源。就在今天早上,我把我的最后一次电子邮件发给了我的教授,但我想在等待他的答案的同时继续努力。我应该返回一个指向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 *”请帮助我? (另外,对不起,如果我的代码格式有点偏差,我试着按照说明进行操作,但也可能失败了:/)

3 个答案:

答案 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)

在您使用随机值填充之前,您似乎正在尝试查找数组中的最小数字。您需要首先初始化数组 ,然后找到最小的值。