2017-05-09 106 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(而不是用原始指針播放)