출처 | DO IT C언어 자료구조
배열의 요소 역순 출력
이번 시간에는 배열의 요소를 역순으로 출력하는 프로그램 및 아이디어를 살펴 볼 예정이다.
예를 들어,
1. 배열 P의 요소 개수가 7
2. 첫 번째 순서대로 {22, 57, 11, 32, 91, 68, 70}이 들어 있다고 가정
3. 순서를 뒤바꾸게 된다면, p[0] = 22와 | p[6] = 70을 바꾼다.
4. 그렇게 되면 교환 횟수를 구할 수 있게 되는데,  "교환 횟수 = 요소개수 / 2 이다 "
for(int i = 0; i < n/2; i++) 로 표현가능
1. a[i]와 a[n-i-1]의 값을 교환한다.int i = 0;
for(i = 0; i < n/2; i++)
{
   int t = p[i];
   p[i] = p[n-i-1];
   a[n-i-1] = t; 
 //a[i]와 a[n-i-1]의 값을 교환했다.
}이런 형식을 매크로로 구현해보겠다. 우선 매크로와 관련된 얘기를 해보자.
참고 > [c언어 코딩 도장] : https://dojang.io/mod/page/view.php?id=652
#define은 함수 모양의 매크로도 정의할 수 있다.
#define 매크로이름(x) 함수(x)
#define 매크로이름(x) 코드조합
#include <stdio.h>
#define PRINT_NUM(x) printf("%d\n", x)    // printf("%d\n", x)를 PRINT_NUM(x)로 정의
int main()
{
    PRINT_NUM(10);    // 10: printf("%d\n", 10)
    PRINT_NUM(20);    // 20: printf("%d\n", 20)
    return 0;
}
이와 같이 풀이된다.

이 부분을 이해한 후에 매크로 함수로 배열의 요소를 역순으로 출력해보자,
#include <stdio.h>
#include <stdlib.h>
#define swap(type, x, y) do{type t = x; x = y; y = t;} while(0)
void t_reverse(int a[], int n)
{
	int i;
	for (i = 0; i < n / 2; i++)
	{
		swap(int, a[i], a[n - i - 1]);
	}
}
int main()
{
	int i;
	int* x;
	int nx;
	printf("요소 개수 : ");
	scanf_s("%d", &nx);
	x = calloc(nx, sizeof(int));// 10개의 배열을 생성하는 역할을 한다.
	printf("%d개의 정수를 입력하세요\n", nx);
	for (int i = 0; i < nx; i++)
	{
		printf("x[%d] : ", i);
		scanf_s("%d", &x[i]); // 사용자가 콘솔 화면에서 값을 입력한다.
	}
	t_reverse(x, nx); // t_reverse 함수를 호출해서 값을 바꾼다.
	printf("배열의 요소를 역순으로 정렬했다. \n");
	for (int i = 0; i < nx; i++) // 값을 순서대로 입력한다.
	{
		printf("x[%d] = %d\n", i, x[i]);
		
	}
	free(x);
	return 0;
}자세한 과정을 살펴보자.
for(int i = 0; i < n/2; i++)
      do{ int t = a[i]; a[i] = a[n-i-1]; a[n-i-1] = t;} while(0); == 
      {int t = a[i]; a[i] = a[n-i-1]; a[n-i-1] = t;}
다음 시간엔 기수변환에 대해서 알아보겠다.