C++数组传递和返回

C++ Array passing and returning

本文关键字:返回 数组 C++      更新时间:2023-10-16
#include <bits/stdc++.h>
using namespace std;
int* insertionSort(int* a);
int main()
{
  int a[5];
  for(int i=0;i<5;i++)
  {
    cin>>a[i];
  }
  int b[5];
  *b = insertionSort(a);
  for(int i=0;i<5;i++)
  {
    cout<<b[i]<<" ";
  }
}
int* insertionSort(int* a)
{
  for(int i=1;i<5;i++)
  {
    int key=a[i];
    int j=i-1;
    while(j>0 && a[j]>key)
    {
      a[j]=a[j+1];
      j-=1;
    }
    a[j+1]=key;
  }
  return a;
}

所以这是我的插入排序代码。但是当我运行它时,它给了我错误

insertionSort.cpp: 在函数 'int main((' 中: insertionSort.cpp:15:21:错误:从"int*"到"int"的转换无效 [-fallowive] *b = insertionSort(a(;

我想知道函数中的传递和返回数组如何在C++中工作。我的代码中有什么错误?

PS :我的插入代码可能是错误的。我没有真正测试过它,所以请原谅我,由于此错误,我无法检查它。如果有人能详细解释一下,那将非常有帮助。

insertionSort返回一个int指针,并且您尝试通过取消引用指针(*b(将其分配给int。正确的语法是

b = insertionSort(a);

此外,b应声明为int* b

附言,这可以编译,但仍然无法按预期工作,但这与您提出的问题完全不同。

#include <array>
#include <algorithm> // sort
#include <iostream>
constexpr size_t size {5};
std::array<int, size>* insertionSort(std::array<int, size>& a)
{
    std::sort(a.begin(), a.end());
    return &a;
}
int main()
{
    std::array<int, size> a {1, 4, 3, 2, 5};
    std::array<int, size>* b = insertionSort(a);
    for(size_t i = 0; i < size; ++i)
        std::cout << (*b)[i] << std::endl;
}
  • 您应该尽可能使用标准库函数(此处为排序函数(
  • 多亏了 C++11,我们知道有数组(而不是使用原始指针(