노무현 대통령 배너


2006. 7. 20. 14:14

[본문스크랩] const 포인터

const 키워드는 변수를 상수로 선언할 때 사용한다.

변수란 의미 자체가 변할 수 있는 수이고, 상수란 의미는변하지 않는수인데, 변수를 상수로 선언한다는게 말이나 되는가??

프로그래밍에서 변수는 변할 수 있는 수라는 의미보다는 메모리를 차지하고 있는 기억 공간의 의미로 쓰인다. 그렇기 때문에 변수를 상수로 선언한다는 것은 메모리를 차지하고 있는 기억 공간이지만 그 안에 저장된 값을 바꾸지 못하게 한다는 뜻이다.

예를 들면 다음과 같이...

cosnt int a = 10;

int constb = 20; // const는 앞에 붙여도 되고 뒤에 붙여도 된다.

선언된 a와 b는 이제 더이상 값을 바꾸지 못한다.

그렇다면 const로 선언한 포인터의 경우는 어떨까??

포인터는 다른 기억 공간의 메모리 주소를 가지고 있는 변수이다. 그렇기 때문에 가지고 있는 메모리 주소를 바꾸지 못하게 할 수도 있지만, 포인터가 가리키고 있는 기억 공간의 값을 바꾸지 못하게 할 수도 있다.

다음과 같이 선언된 포인터는 전자에 해당한다. (메모리 주소를 바꾸지 못함)

int * const p = &x;

그러므로 아래의 첫번째 구문에서는 에러가 발생하지만, 두번째 구문에서는 에러가 발생하지 않는다.

p = &y; // 에러!!

*p = 10;

다음과 같이 선언된 포인터는 후자에 해당한다. (포인터가 가리키고 있는 기억 공간의 값을 바꾸지 못함)

const int *p;

그러므로 아래의 첫번째 구문에서는 에러가 발생하지 않지만, 두번째 구문에서는 에러가 발생한다.

p = &x;

*p = 20; // 에러!!