assignment-s-13-2.c (1346B)
1 /* Write a function that reverses the elements of an array in place, using only a single 2 pointer argument, and return void. */ 3 4 #include <stdio.h> 5 #include <stdlib.h> 6 7 struct Array 8 { 9 int size; 10 int *arr; 11 }; 12 13 void inputarr(int[], int); 14 void display(int[], int); 15 void reverse(struct Array *); 16 17 int main() 18 { 19 struct Array array; 20 printf("How many element do you want to add: "); 21 scanf("%d", &array.size); 22 array.arr = (int *)malloc((array.size) * sizeof(int)); 23 inputarr(array.arr, array.size); 24 printf("\n=== Before Reverse ===\n"); 25 display(array.arr, array.size); 26 reverse(&array); 27 printf("\n\n=== After Reverse ===\n"); 28 display(array.arr, array.size); 29 free(array.arr); 30 return 0; 31 } 32 33 void inputarr(int arr[], int n) 34 { 35 int i; 36 for (i = 0; i < n; i++) 37 { 38 printf("Enter element %d: ", i + 1); 39 scanf("%d", &arr[i]); 40 } 41 } 42 43 void display(int arr[], int n) 44 { 45 int i; 46 for (i = 0; i < n; i++) 47 { 48 printf("\nIndex: %-2d | Value: %-5d | Address: %p", i, arr[i], (void *)&arr[i]); 49 } 50 } 51 52 void reverse(struct Array *array) 53 { 54 int *start = array->arr; 55 int *end = array->arr + (array->size - 1); 56 while (start < end) 57 { 58 *start = *start ^ *end; 59 *end = *start ^ *end; 60 *start = *start ^ *end; 61 start++; 62 end--; 63 } 64 }