Во-первых, C / C ++ лучше всего читать «сверху вниз»:
int arraySize;
int array[arraySize]; // arraySize is undefined here!!
cin >> arraySize;
Во второй строке, ArraySize, может быть 1, или 0, или -1000.Вы не определили его до третьей строки. Кроме того, C ++ не позволяет выделять массивы переменного размера (если только этот размер не является константным [поэтому он известен во время компиляции]):
int array[4];
Выше хорошо.Это помогает операционной системе узнать, сколько памяти выделено для вас в стеке (это необходимо сделать до запуска программы).
const int arraySize = 4;
int array[arraySize];
Поскольку компилятор C ++ знает, что arraySize равен 4, он обрабатываетэто так же, как приведенный выше код, так что это тоже хорошо.
Таким образом, для обработки массивов действительно переменной длины (длина зависит от входных данных), вам нужно сначала прочитать пользовательские вводы, , а затем используйте динамическое выделение («новый», или контейнер, который выполняет динамическое выделение для вас, например, вектор).
Что касается проблемы с «const», я думаю, что вам нужно понять, что«const» - это просто обещание программиста: программист сообщает компилятору (и всем программистам, читающим код), что эти данные не должны изменяться.Все, что делает компилятор, это проверяет, выполняете ли вы свое обещание (или отправляете ли вы его другой функции / указателю, который не выполняет это обещание).Таким образом, используя «const», вы не выполняете работу по поддержанию константности данных - просто вы получите жалобу, если вы не выполнят эту работу.
int* sortedCopy(const int *array, int size) {
Выше вы указываете компилятору, что функция sortedCopy будет сохранять данные в массиве постоянными.
array[i] = array[min];
array[min] = temp;
И здесь (выше) вы нарушаете это обещание.
Если вы не хотите редактировать исходный массив, то самое простое решение - просто скопировать его перед отправкой в функцию сортировки.