#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를 통해 배열을 출력할 것이다.
'Mentoring' 카테고리의 다른 글
[멘토링][c언어] 백준 1157번 : 단어 공부 (포인터 사용) (0) | 2020.06.04 |
---|---|
[멘토링][c언어] 백준 10809번 : 알파벳 찾기 (포인터 사용) (0) | 2020.06.03 |
[멘토링][c언어]백준 2562번 : 최댓값 (포인터 사용) (0) | 2020.06.01 |
[멘토링][c언어]알파벳 개수 문제 (0) | 2020.05.29 |
[멘토링][c언어]백준 1152번 : 단어의 개수 (0) | 2020.05.28 |