1
#include <iostream>
#include <string>
using namespace std;

// Declaration of the function indexvalue()
int *maxArr(int [], const int);

// Another function used to print out an error message
    void
    problem(string str) {
        cout << str << endl;
        exit(1);
}

const int Size = 10;

int main() 
{
        int a[Size] = {23, 45, 12, 76, 9, 131, 10, 8, 23, 4};
    int *b, i;

        string error1("Problem with maxArr(), wrong subscript"); 
        string error2("Problem with maxArr(), output should be NULL");

// Call the function multiple times with different input
// Note the use of pointer arithmetic
        if (maxArr(a,Size)!= a+5)   problem(error1);
        if (maxArr(a,Size-5)!= a+3) problem(error1);
        if (maxArr(a+6,4)!= a+8)    problem(error1);
        if (maxArr(a,0)!= NULL)     problem(error2);
// The function passed all the tests

        cout << "The function passed all the tests in this program\n" << endl;
        exit(0);
}

int *maxArr(int arr[], int size){
   int max = 0;
   int index = 0;

   if ( size < 0)
    return NULL;

   for (int i = 0; i < size; i++) {
    if (arr[i] > max )
    {
       max = arr[i];
       index = i;
    }
        return arr + i;
   }           
}

maxArr() 的规范

该函数接受一个整数数组,以及元素的数量作为参数。该函数返回指向数组最大值的 int 的地址。

我试图弄清楚 maxArr() 函数有什么问题,到目前为止我唯一纠正的是将 if(size < 0) 更改为 if (size <= 0) 以处理 null 情况,我没有了解如何更正函数以解决 error1 消息。任何帮助,将不胜感激。

4

2 回答 2

0

您在这里有括号问题:

   for (int i = 0; i < size; i++) {
    if (arr[i] > max )
    {
       max = arr[i];
       index = i;
    }
        return arr + i;
   }

您的返回在 for 循环内,因此您将在循环的第一次交互时返回。

index 未使用,您可能希望将return语句移到主循环之外并返回 arr + index;

于 2013-10-26T22:43:42.947 回答
0

您正在从for函数的循环内部返回maxArr。它总是在第一次迭代中返回。你也应该返回arr+index而不是arr+i.

for (int i = 0; i < size; i++) 
{
    if (arr[i] > max )
    {
       max = arr[i];
       index = i;
    }
    //return arr + i;
    // ^^^^ Wrong
} 
return arr+index; //return from here

NULL在您当前的情况下,退货检查将失败。你应该像这样检查:

if ( size <= 0)
    return NULL;
于 2013-10-26T22:39:10.103 回答