2017-05-09 62 views
-2
#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; 
} 

所以这是我的代码插入排序。但是当我运行它时,它给了我错误C++数组传递和返回

insertionSort.cpp: In function ‘int main()’: insertionSort.cpp:15:21: error: invalid conversion from ‘int*’ to ‘int’ [-fpermissive] *b = insertionSort(a);

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

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

+0

数组不是指针和指针不是数组。 – molbdnilo

回答

1

insertionSort返回一个int指针,你试图通过取消引用指针(*b)把它分配给int。正确的语法是

b = insertionSort(a); 

而且,b应该声明为int* b

P.S.,这个编译,但仍然没有像预期的那样,但这是从你提出的一个完全不同的问题。

+0

但这绝对不是你想要的。只需让你的函数不返回任何东西('void'),因为你已经将有序数组存在地址'a'。你也可以改变'b'的地址,而不用在'b'处释放内存。 – Shadow

+0

使用此我得到另一个错误的错误:赋值'int *'到'int [5]'的不兼容类型' b = insertSort(a); –

+0

@SarfrazBaig什么错误? –

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(而不是用原始指针播放)