SH1R0_HACKER

C언어 :: 포인터 정리 (2) - 배열과 포인터의 관계 본문

Programming Language/C

C언어 :: 포인터 정리 (2) - 배열과 포인터의 관계

SH1R0_HACKER 2021. 1. 16. 14:34
// 포인터 정리(2)
// 배열과 포인터와의 관계

#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 a = 10;
	int* ptr = &a;

	printf("&a = %d\n", &a);
	printf("ptr = %d\n", ptr);
	printf("ptr+1 = %d\n", ptr + 1); // int형 크기만큼 증가 (4byte)
}

void example2() {
	int arr[10] = { 0, };
	
	for (int i = 0; i < 10; i++) { // arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
		arr[i] = i + 1;
		printf("&arr[%d] = %d\n", i, &arr[i]); //arr[i]의 주소값 출력
		printf("arr + %d = %d\n", i, arr + i);
	}

	printf("arr = %d\n", arr); // arr = &arr[0]
	printf("arr+1 = %d\n", arr + 1); // arr+1 = &arr[0]+1
}

void example3() {
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	
	for (int i = 0; i < 10; i++) {
		printf("%d ", arr[i]);
	}
	printf("\n");

	for (int i = 0; i < 10; i++) {
		printf("%d ", *(arr + i)); //*(arr+i) = *(&arr[i]) = arr[i]의 값
	}
	printf("\n");

	for (int* ptr = arr; ptr < arr + 10; ptr++) {
		// 포인터 ptr 선언 후 arr의 값 (arr[0]의 주소값) 대입
		// ptr의 값이 arr+10 미만 (arr[9]의 주소값)까지 반복
		// ptr의 값 1 증가 (ptr + 1 = arr + 1 = &arr[1])
		printf("%d ", *ptr);
	}
	printf("\n");
}