SH1R0_HACKER

C언어 :: 포인터 정리 (3) - 배열 포인터 본문

Programming Language/C

C언어 :: 포인터 정리 (3) - 배열 포인터

SH1R0_HACKER 2021. 1. 16. 16:09
// 포인터 정리(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]);
	}
}