이번 포스팅은 포인터 대상의 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 선언되어 수정 불가능한 값을 수정하려할 때 에러가 발생함을 알 수 있습니다.
'C' 카테고리의 다른 글
c언어 함수의 인자 전달 call by value call by reference call by address (1) | 2018.12.31 |
---|---|
C언어 literal과 배열, 문자열 (0) | 2018.12.23 |
c언어 홑따옴표와 쌍따옴표(작은 따옴표 큰 따옴표) (2) | 2018.12.23 |
포인터의 개념 (0) | 2018.01.10 |