【问题标题】:C++ Array passing to function with size [closed]C ++数组传递给具有大小的函数[关闭]
【发布时间】:2020-02-25 17:06:24
【问题描述】:

我正在编写 C++ 代码以使用函数从整数数组中获取最大数。

我的代码如下,但它不起作用,我似乎无法修复它,如果可能的话,我想知道它有什么问题:

#include<iostream>
using namespace std;

int maxfunc(int myArr, int size);
int main()
{
    int size;
    cout<<"Enterv the size of array: "<<size;
    int *arr=new int [size];
    for(int i=0; i<size; i++)
    {
        cout<<"Value No. "<<i+1<<" : ";
        cin>>arr[i];
    }
    int max = maxfunc(arr,size);
    cout<<"max = "<<max;

}
int maxfunc(int myArr, int size)
{
    int largest=myArr[0];
    for(int i=1; i<size; i++)
    {
        if(largest<myArr[i])
        {
            largest=myArr[i];
        }
    }
    return largest;
}

【问题讨论】:

  • 是什么让你觉得代码有问题?您是否期望某些特定输出运行它,但您得到了不同的输出?如果是这样,你能这么说并给出这两个输出吗?或者您是否收到编译时/运行时错误?如果是这样,你能包括错误吗?
  • @Die Hard 你没有输入数组的大小。
  • 顺便说一句,代码的问题是您应该使用std::max_element 而不是重新发明轮子,但我觉得这不是您所追求的;)
  • 编译您的代码,并选择将警告视为错误。
  • 投票结束是一个错字。 int maxfunc(int myArr, int size) 必须是 int maxfunc(int* myArr, int size)int maxfunc(int myArr[], int size)

标签: c++ arrays max


【解决方案1】:

int maxfunc(int myArr, int size)

参数int myArr 是一个整数,但您将它用作整数数组。 我会使用指向原始数组的指针:

int maxfunc(int *myArr, int size)

另一个突出的问题是您使用未初始化的size 变量,我的猜测是您缺少cin &gt;&gt; size;

cout<<"Enterv the size of array: ";
cin >> size;

最后,这是基于意见的,这是您将在 C 中使用的那种程序,对于 C++,有更好的工具来存储操作数据。对于这种情况,我会推荐std::vector,或者如果数组需要固定大小,std::array

【讨论】:

    【解决方案2】:

    你没有输入数组的大小

    int size;
    cout<<"Enterv the size of array: "<<size;
    int *arr=new int [size];
    

    所以程序有未定义的行为。

    函数实现也是错误的,因为通常用户可以传递等于或小于 0 的第二个参数。

    函数应该像这样声明

    size_t maxfunc( const int myArr[], size_t size);
                    ^^^^^^^^^^^^^^^^^
    

    它应该返回最大元素的索引。

    函数可以实现如下

    size_t maxfunc( const int myArr[], size_t size )
    {
        size_t largest = 0;
    
        for ( size_t i = 1; i < size; i++ )
        {
            if ( myArr[largest] < myArr[i] )
            {
                largest = i;
            }
        }
    
        return largest;
    }
    

    在 main 你可以写

    size_t max = maxfunc( arr, size );
    cout << "max = " << arr[max] << '\n';
    
    delete []arr;
    

    不要忘记释放分配的内存。

    请注意,在 C++ 中,有标准算法 std::max_element 在标头 &lt;algorithm&gt; 中声明,用于执行该任务。它返回指向最大元素的迭代器。

    【讨论】:

    • "它应该根据什么返回最大元素的索引"?用户想要返回最大元素,而不是最大元素的索引。
    • @John 正如我所写,第二个参数可以例如等于 0。在这种情况下,函数具有未定义的行为。根据程序员的资质,说的更简单。
    猜你喜欢
    • 2016-02-19
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 2011-05-24
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多