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


포인터 대상의 const 선언


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


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

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



1.

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

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



2.

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



3.

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






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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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