#include <stdio.h>
void swap_value(int a, int b);
void swap_pointer(int *a, int *b);

int main() {
     //포인터로 배열 접근
     int arr[3] = {10, 20, 30};
     int *p = arr; // arr == &arr[0]
     
     printf("p에 저장된 주소 : %p, 가리키는 값 : %d\n", p, *p);
     printf("arr[0]의 주소 : %p\n", &arr[0]);

     //배열의 인덱스로 직접 출력
     printf("arr[0] = %d\n", arr[0]);
     printf("arr[1] = %d\n", arr[1]);
     printf("arr[2] = %d\n", arr[2]);

     printf("\n");
     // 포인터 연산으로 배열 요소 접근
     printf("arr[0] = %d\n", *p);
     printf("arr[1] = %d\n", *(p + 1));
     printf("arr[2] = %d\n", *(p + 2));

     printf("\n");
     // 배열 이름을 포인터처럼 사용
     printf("arr[0] = %d\n", *arr); //*arr == *&arr[0] == arr[0]
     printf("arr[1] = %d\n", *(arr + 1));
     printf("arr[2] = %d\n", *(arr + 2));

     printf("\n");
     // 포인터를 배열처럼 사용
     printf("arr[0] = %d\n", p[0]);
     printf("arr[1] = %d\n", p[1]);
     printf("arr[2] = %d\n", p[2]);
 
     /*---- swap함수 ----*/
     int x = 10, y = 20;
     printf("초기값 : x = %d, y = %d\n", x, y);

     // 값만 교환
     swap_value(x, y);
     printf("값 교환 후 : x = %d, y = %d\n", x, y);

     // 포인터로 교환
     swap_pointer(&x, &y);
     printf("주소 교환 후 : x = %d, y = %d\n", x, y);

     printf("----문제----\n");
     //포인터로 배열 합 구하기
     int arr1[5] = {10, 20, 30, 40, 50};
     int sum = 0;

     sum += *(&arr1[0] + 1); //arr[1]
     int *p1 = arr1; // p1 == &arr1[0]
     sum += p1[3]; // p1[3] == *(p1 + 3)

     p1 = arr1 + 4; // &arr1[0] + 4 == &arr1[4]
     sum += *p1;

     printf("합 : %d\n", sum);

     printf("arr[0] = %p\n", &arr1[0]);
     printf("arr[1] = %p\n", &arr1[1]);
     printf("arr[2] = %p\n", &arr1[2]);


     return 0;
}

void swap_value(int a, int b) {
     int temp = a;
     a = b;
     b = temp;
}

void swap_pointer(int *a, int *b) {
     int temp = *a;
     *a = *b;
     *b = temp;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: