이번 포스팅은 포인터 대상의 const 선언을 매우 간단히 이해하고 마치겠습니다.


포인터 대상의 const 선언


그저 간단하게 const 뒤에 있는건 상수입니다.


원래 포인터 변수 선언 시 *는 연산자로써의 기능이 아닌 포인터 변수임을 알리는 용도이지만,

 이번 내용을 이해할 땐 연산자처럼 여기는게 이해하기 간편합니다.



1.

const 자료형 *변수;     // (*변수) 가 상수이다. == 포인터 변수가 가리키는 값을 변경 시 에러 발생 but 포인터 변수의 값, 즉 주소값은 변경 가능

자료형 const *변수;     // 위와 마찬가지. *변수 가 const 뒤에 있으므로 *변수 가 상수이다.



2.

자료형 * const 변수;     // const 뒤에 변수만 있으므로, 포인터 변수 자체의 값, 즉 주소값을 변경하지 못한다. but *변수 는 변경 가능.



3.

const 자료형 * const 변수;     // 변수도 상수이고, *변수도 상수이다. 다 못 바꾼다.






마지막으로 예시를 통해 확인하겠습니다.

void main() {
	int num1 = 1;
	int num2 = 2;

	const int *p1 = &num1;
	int * const p2 = &num1;
	const int * const p3 = &num1;

	p1 = &num2;
	*p1 = num2; //에러 발생

	p2 = &num2; //에러 발생
	*p2 = num2;

	p3 = &num2; //에러 발생
	*p3 = num2; //에러 발생

}

expression must be a modifiable lvalue 에러가 발생하며 수정 가능한 값을 수정하라 말합니다.


const 선언되어 수정 불가능한 값을 수정하려할 때 에러가 발생함을 알 수 있습니다.

+ Recent posts