// 포인터 정리(3)
// 배열 포인터
#include <stdio.h>
void example1();
void example2();
void example3();
int main() {
printf("예제 1번\n");
example1();
printf("\n");
printf("예제 2번\n");
example2();
printf("\n");
printf("예제 3번\n");
example3();
printf("\n");
}
void example1() {
int arr[5] = { 11, 22, 33, 44, 55 };
int* ptr = arr;
// &arr[0] = arr = ptr
printf("&arr[0] = %d\n", &arr[0]);
printf("arr = %d\n", arr);
printf("ptr = %d\n\n", ptr);
// arr[0] = *arr = *ptr
printf("arr[0] = %d\n", arr[0]);
printf("*arr = %d\n", *arr);
printf("*ptr = %d\n\n", *ptr);
// ptr + 1 = arr + 1 = ptr에 sizeof(*ptr)을 더한 값
printf("sizeof(*ptr) = %d\n", sizeof(*ptr));
printf("ptr + 1 = %d\n", ptr + 1);
printf("arr + 1 = %d\n\n", arr + 1);
// *(ptr + 1) = *(arr + 1)
printf("*(ptr + 1) = %d\n", *(ptr + 1));
printf("*(arr + 1) = %d\n\n", *(arr + 1));
// *ptr + 1 = *arr + 1 = arr[0] + 1
printf("*ptr + 1 = %d\n", *ptr + 1);
printf("*arr + 1 = %d\n\n", *arr + 1);
}
void example2() {
int arr[3] = { 1, 2, 3 };
printf("arr = %d\n", arr);
printf("arr + 1 = %d\n", arr + 1);
printf("&arr = %d\n", &arr);
// &arr에 sizeof(*(&arr)) = sizeof(arr)을 더한 값
printf("sizeof(arr) = %d\n", sizeof(arr));
printf("&arr + 1 = %d\n", &arr + 1);
}
void example3() { // 배열 포인터
int arr[3] = { 1, 2, 3 };
int(*ptr_arr)[3]; // 길이가 3인 int형 배열 arr을 가리키는 포인터 선언
ptr_arr = &arr;
for (int i = 0; i < 3; i++) {
printf("%d ", (*ptr_arr)[i]);
}
}