#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;
}
To embed this project on your website, copy the following code and paste it into your website's HTML: