我不能将我的数组传递给我的函数

时间:2017-05-10 11:26:21

标签: c++

我正在做一个shell排序程序但是将数组传递给我的函数有一些问题,我已经搜索了一些关于将数组传递给函数的帖子,但我仍然不明白。

#include <iostream>
#include <cmath>
using namespace std;

int shellsort(int arr[]){
    int gap = floor(sizeof(arr)/2);
    for(int gap = floor(sizeof(arr)/2); gap < 0; gap=gap/2){
        for(int i = gap; i < sizeof(arr); i++){
            if(arr[i] < arr[i-gap]){
                int temp = arr[i];
                arr[i] = arr[i-gap];
                arr[i-gap] = temp;
                if(gap == 1){
                    if(arr[i-1] < arr[i-2]){
                        int temp = arr[i-1];
                        arr[i-1] = arr[i-2];
                        arr[i-2] = temp;
                    }
                }
            }
        }
    }
    return arr;
}


int main(){ 
    int numcount;
    cin>>numcount;
    int numbers[numcount];
    for(int i; i<numcount; i++){
        cin>>numbers[i];
    }   

    int numbers = shellsort(numbers);
    cout<<numbers;
}

2 个答案:

答案 0 :(得分:1)

小心你承诺要回来的东西以及你的回报。

String convertToString(InputStream in){
    Scanner scanner = new Scanner(in)
    scanner.useDelimiter("\\A");

    boolean hasInput = scanner.hasNext();
    if (hasInput) {
        return scanner.next();
    } else {
        return null;
    }

}

现在,要么改为使用向量:

int shellsort(int arr[]){
    //....
    return arr;//<--- ****not an int****
}

或发送大小

std::vector<int> shellsort(std::vector<int> arr){
    int gap = floor(arr.size()/2);
    for(int gap = floor(arr.size()/2); gap < 0; gap=gap/2){
        //as above
    }
    return arr;
}

答案 1 :(得分:0)

问题在于,在您的函数中,int arr[]的实际大小未知,而arr衰减到指针,因此sizeof(arr) == sizeof(int*)

我建议您重写代码以使用std::vector

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;

std::vector<int> shellsort(std::vector<int> arr){
    int gap = floor(arr.size()/2);
    for(int gap = floor(arr.size()/2); gap < 0; gap=gap/2){
        for(int i = gap; i < arr.size(); i++){
            // ...as before...
        }
    }
    return arr;
}


int main(){ 
    int numcount;
    cin>>numcount;
    std::vector<int> numbers(numcount);
    for(int i; i<numcount; i++){
        cin>>numbers[i];
    }   

    numbers = shellsort(numbers);
    for (std::size_t i = 0u; i < numbers.size(); ++i)
        cout<<numbers[i];
}