在C++中传递数组

Passing arrays in C++

本文关键字:数组 C++      更新时间:2023-10-16

我对C++还很陌生,我想做的是将insert_sort函数的输出传递给主函数。这是我的代码

#include "include.h"
using namespace std;
int main()
{
    int arr[10] = {12,9,32,1,0,5,13,7,4,2};

    for (int i = 0; i < 10 ; ++i)
    {
        cout << insertion_sort(arr[i]) << endl;
    }
    return EXIT_SUCCESS; 
}
int* insertion_sort(int* arr){
    int key, temp =0;
    for (int i = 0; i < 10; ++i)
    {
        key = i+1;
        while(key >= 0){
            if (arr[key] < arr[key -1])
            {
                temp = arr[key -1];
                arr[key -1] = arr[key];
                arr[key] = temp;
            }
            key--;
        }
    }
    return arr;
}

我得到的是

candidate function not viable: no known conversion from 'int' to 'int *' for 1st argument; take the
      address of the argument with &
int* insertion_sort(int* arr);

插入排序算法在这里并不重要。我只是不明白为什么数组指针没有传递给函数。

这里发生了很多事情:

arr[i]是一个整数(类型为int)。您应该传递类型为int*的arr。

insert_sort函数似乎正在修改输入数组,因此不需要返回值。

此外,您不应该调用插入排序10次。调用insert_sort,然后使用for循环打印排序后的数组。

没有太多变化:

#include <iostream>
using namespace std;
void insertion_sort(int* arr){
    int key, temp =0;
    for (int i = 0; i < 10; ++i)
    {
        key = i+1;
        while(key >= 0){
            if (arr[key] < arr[key -1])
            {
                temp = arr[key -1];
                arr[key -1] = arr[key];
                arr[key] = temp;
            }
            key--;
        }
    }
}
int main()
{
    int arr[10] = {12,9,32,1,0,5,13,7,4,2};
    insertion_sort(arr);
    for (int i = 0; i < 10 ; i++)
    {
        cout << arr[i] << endl;
    }
    return 0;
}

我会坚持回答你的问题,让你自己解决剩下的问题。

您的函数签名是int*insert_sort(int*arr),这意味着它期望一个指向int的指针,并将返回一个指向int的指针。

但是,您正在传递它arr[i],它是一个int,而不是指向int的指针。

尝试&arr[i]

编码快乐!:)