在C++中使用函数对数组排序[已关闭]

7uhlpewt  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(147)

8小时前关门了。
Improve this question
我想用一个函数做一个排序语句,问题是无法返回到main()函数,是什么问题呢?我也试了一下void。

int sort_func(int sort[]) {
    int swap = 0;
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 4; i++) {
            if (sort[j] > sort[j + 1]) {
                swap = sort[j];
                sort[j] = sort[j + 1];
                sort[j + 1] = swap;
            }
        }
    }
    return sort[5];
}

代码中的问题是什么?

eqqqjvef

eqqqjvef1#

你不需要return任何东西,数组是通过int*指针传递给函数的,所以代码直接操作调用者数组的元素。
此外,第二个for循环正在递增i,而实际上它应该递增j
调用者的数组是如何声明的呢?函数内部的循环要求sort参数指向一个至少包含5个元素的int[]数组。然而,函数的声明并不传达或强制执行这个要求,因此调用者可以自由地传入它想要的任何数量的元素。如果这个大小小于5,那么你的代码将有 * 未定义的行为 *。你至少应该让调用者把元素的实际数量作为另一个参数传递进来,例如:

void sort_func(int sort[], int size) {
    int swap = 0;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < (size-1); j++) {
            if (sort[j] > sort[j + 1]) {
                swap = sort[j];
                sort[j] = sort[j + 1];
                sort[j + 1] = swap;
            }
        }
    }
}
int arr[5];
...
sort_func(arr, 5);

否则,如果您严格要求5个元素,则通过获取指向正好包含5个元素的数组的指针来强制执行,例如:
一个二个一个一个
或者,使用引用代替指针,例如:

void sort_func(int (&sort)[5]) {
    int swap = 0;
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 4; j++) {
            if (sort[j] > sort[j + 1]) {
                swap = sort[j];
                sort[j] = sort[j + 1];
                sort[j + 1] = swap;
            }
        }
    }
}
int arr[5];
...
sort_func(arr);

相关问题