Изменить код используя указатели - C (СИ)
Формулировка задачи:
Мне надо изменить код используя указатели, как это сделать? Подскажите, пожалуйста!
вот сам код:
int m[n];
clrscr();
printf("Bedute 15 elemeHtoB macuBa\n");
for(int i = 0; i < n; i++)
{
printf("mass[%d] = ", i);
scanf("%d", &m[i]);
}
for(int i = n - 1; i >= 1; i--)
for(int j = 0; j < i; j++)
{
if(m[j] > m[j+1])
{
int foo = m[j];
m[j] = m[j+1];
m[j+1] = foo;
}
}
printf("\n");
for(int i = 0; i < n; i++)
printf(" %d ", m[i]);
getch();Решение задачи: «Изменить код используя указатели»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define SWAP(a, b) ({ int t = *a; *a = *b; *b = t; })
int main(void){
int * arr, * i, * j, size;
printf("Size: ");
scanf("%d", &size);
if ( ( arr = (int*)malloc(sizeof(int) * size) ) == NULL ){
perror("malloc");
exit(1);
}
for ( i = arr; i < arr + size; ++i ){
printf("Array[%d] = ", i - arr);
scanf("%d", i);
}
for ( i = arr + size - 1; i > arr; --i )
for ( j = arr; j < i; ++j )
if ( *j > *i )
SWAP(i, j);
for ( i = arr; i < arr + size; ++i )
printf("%d ", *i);
printf("\n");
free(arr);
exit(0);
}
Объяснение кода листинга программы
- Программа запрашивает у пользователя размер массива и сохраняет его в переменной
size. - С помощью функции
mallocвыделяется память под массив целых чисел, и указатель на первый элемент массива сохраняется в переменнойarr. - Затем программа заполняет массив числами, которые пользователь вводит с клавиатуры.
- После заполнения массива программа сортирует его методом
сортировки пузырьком. - Затем программа выводит отсортированный массив на экран.
- После вывода массива программа освобождает память, выделенную под массив, с помощью функции
free. - Программа завершает свое выполнение и возвращает 0.