我无法将数组传递到我的函数中

i cant pass my array into my function

本文关键字:我的 函数 数组      更新时间:2023-10-16

我正在做一个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;
}

当心你答应归还的东西和你归还的东西。

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;
}

或发送尺寸

int * shellsort(int * arr, size_t size){
    int gap = floor(size/2);
    for(int gap = floor(size/2); gap < 0; gap=gap/2){
        //as above
    }
    return arr;
}

问题是在你的函数内部,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];
}