Страницы

Поиск по вопросам

вторник, 2 апреля 2019 г.

Как передать массив в функцию, чтобы его значения не изменились

Хотел реализовать сортировку вставкой и задался таким вопросом: как мне передать массив в функцию чтобы после обработки его значения не изменились в функции main? Допустим я хочу передать массив в функцию, чтобы он там сортировался, вывести его в этой же функции, но чтобы при этом значения его не поменялись в функции main. Если когда я передаю обычную переменную в функцию, то она не изменится, а если массив то там передается указатель на массив и он полюбому изменит свои значения в функции main.
#include #include #include #include
void PrintA(int A[], int N); void Swap(int *a, int *b); void InsertionSort(int A[], int N);
int main(void) { const int N = 10; int A[N];
for (int i = 0; i < N; i++) { A[i] = 1 + rand() % 9; }
printf("Array under insertion sort:
"); PrintA(A, N);
InsertionSort(A, N);
/*printf("Array after insertion sort:
"); PrintA(A, N);*/
system("pause"); }
void PrintA(int A[], int N) { for (int i = 0; i < N; i++) { printf("%d ", A[i]); } printf("
"); }
void Swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
void InsertionSort(int A[], int N) { int j;
for (int i = 1; i < N; i++) { j = i; while (j > 0 && A[j - 1] > A[j]) { Swap(&A[j - 1], &A[j]); j--; } } PrintA(A, N); }
Пробовал как-то снять указатель на массив, но потом у меня были ошибки с функцией Swap в функции InsertionSort.


Ответ

Только копирую массив во временную переменную а ля template
void InsertionSort(int A[], int N) { // Вот здесь: int template[A.Length]; for(int i = 0;i < A.Length;i++) { template[i] = A[i]; } int j;
for (int i = 1; i < N; i++) { j = i; while (j > 0 && template[j - 1] > template[j]) { Swap(&template[j - 1], &template[j]); j--; } } //Передаем наш массив PrintA(template, N); }

Комментариев нет:

Отправить комментарий