Mentoring

[멘토링][c언어]배열 거꾸로 출력하기 (포인터 및 배열 사용)

seomj 2020. 6. 4. 00:59

#include <stdio.h>

int main() {
	int arr[5] = { 2,4,6,8,10 };
	int *p = arr;
	int num = 0;

	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4 - i; j++) {
				num = *(p + 1 + j);
				*(p + 1 + j) = *(p + j);
				*(p + j) = num;
		}
	}

	for (int i = 0; i < 5; i++) {
		printf("%d \n", p[i]);
	}

	return 0;
}

arr[5]로 배열을 선언하고 초기화 시켜준다.

arr배열을 가르키는 포인터 p를 선언한다.

변수 num을 선언하고 초기화한다.

 

 

for문을 사용하여 배열을 거꾸로 출력해 줄 것이다.

첫 번째 for문에서 i를 선언하고 우리는 총 4번을 반복할 것이므로 'i < 4'의 조건을 준다.

두 번째 for문에서는 j를 선언하고 여기서는 하나씩 뒤로 보내줄 것이다. 처음에는 '2'를, 그 다음은 '4'를, '6', '8', '10' 순서로 자리를 뒤로 보내주어 거꾸로 저장을 시킬 것이다.

 

'i=0'일 때 'j=0'이면 num 값에 *(p+1)가 저장될 것이고 *(p+1)=4 이므로 num=4 이다.

*(p+1+0)=*(p+0)으로 *(p+1)=*p, *(p+1)=2 이다.

*(p+0)=num 이므로 4가 저장되고 배열에는 { 4, 2, 6, 8, 10 }이 저장되었다.

 

'i=0'일 때 'j=1'이면 num 값에 *(p+2)가 저장될 것이고 *(p+2)=6 이므로 num=6 이다.

*(p+1+1)=*(p+1)으로 *(p+2)=*(p+1), *(p+2)=2 이다.

*(p+1)=num 이므로 6이 저장되고 배열에는 { 4, 6, 2, 8, 10 }이 저장되었다.

 

이런 식으로 쭉 하면 j의 반복문이 끝나고 i의 반복문에서 'i=1'이 될 때 배열은 { 4, 6, 8, 10, 2 } 이다.

 

'i=1'일 때 'j=0'이면 num 값에 *(p+1)가 저장될 것이고 *(p+1)=6 이므로 num=6 이다.

*(p+1+0)=*(p+0)으로 *(p+1)=*p, *(p+1)=4 이다.

*(p+0)=num 이므로 6이 저장되고 배열에는 { 6, 4, 8, 10, 2 } 이다.

이렇게 쭉 하면 된다.

 

만약 여기서 'j < 4' 라는 조건을 주면 'i=2'가 될 때 배열은 { 6, 8, 10, 2, 4 }가 될 것이다.

그렇게 되면 반복문을 모두 실행하여도 우리가 원하는 결과값을 얻을 수 없다.

그러므로 'j < 4 - i'라는 조건을 주어 배열이 { 6, 8, 10, 4, 2 }가 되도록 해야한다.

 

계속해서 반복문을 돌리고 나면 printf를 통해 배열을 출력할 것이다.