C ++数组传递和返回

时间:2017-05-09 12:47:23

标签: c++ arrays

#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'的无效转换[-fpermissive]      * b = insertionSort(a);

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

P.S:我的插入代码可能出错了。我没有真正测试它,所以请原谅我因为这个错误而无法检查它。如果有人可以详细解释它,那将非常有用。

2 个答案:

答案 0 :(得分:1)

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

b = insertionSort(a);

此外,b应声明为int* b

P.S。,这编译,但仍然没有按预期工作,但这与你提出的问题完全不同。

答案 1 :(得分:0)

#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;
}
  • 您应该尽可能使用标准库函数(here the sort one
  • 感谢C ++ 11,我们知道有array(而不是使用原始指针)