#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:我的插入代码可能出错了。我没有真正测试它,所以请原谅我因为这个错误而无法检查它。如果有人可以详细解释它,那将非常有用。
答案 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;
}