공부 기록

상수 포인터

solfa 2022. 7. 17. 17:25


1) const int *ptr == int const *ptr
- 변수의 값을 변경하는 것을 막음

#include <stdio.h>

int main()
{
	int num = 10; // num에 변수 선언
	int *ptr1 = &num; // 포인터 ptr1에 num(10)의 주소값 선언
	const int *ptr2 = &num; // 포인터 상수 ptr2에 num(10)의 주소값 선언

	*ptr1 = 20; // 포인터 ptr1에 20 대입, 20의 주소값으로 바뀜
	num = 30; // 변수 num에 30 대입

	*ptr2 = 40; // error!!! prt2는 상수니까 대입, 선언 XXX

	return 0;
}

 

2) int* const ptr (const 전에 * 써주기)
- 포인터 변수 자체가 상수화 됨, 주소값 변경 X

#include <stdio.h>

int main()
{
	int num1 = 10, num2 = 20; // num1에 10 대입, num2에 20 대입
	int *ptr1 = &num1; // 포인터 ptr1에 num1(10)의 주소값 대입, 선언
	int* const ptr2 = &num1; // 포인터 상수 ptr2에 num1(10)의 주소값 대입, 선언
	
	ptr1 = &num2; // 포인터 ptr1에 num2(20)의 주소값 대입, 선언
	
	*ptr2 = 30; // 포인터 ptr2의 값을 30으로 변경
	ptr2 = &num2; // error!! 포인터 상수의 값은 변경해도 주소값(&)은 변경 못 함
	
	return 0;
}

1과 2를 합쳐 const를 두 번 쓰는 것도 가능함

Ex) const int* const ptr2 = &num

728x90