const 키워드
Programming/C 2013. 2. 15. 02:38 |int num = 5;
int* ptr = #
포인터 ptr의 선언에서 const가 들어갈 수 있는 위치.
const int* const ptr = #
포인터 선언 앞 부분에 const가 삽입될 수도 있고, 포인터 변수의 이름 앞에 const가 삽입될 수도 있다.
이 둘은 다른 의미를 지닌다.
필요하다면, 두 군데 모두에 const를 삽입 할 수도 있다.
ⓐ 포인터 앞에 있는 const의 의미.
int num = 5;
const int* ptr = #
이렇게 선언이 되면 포인터 ptr은 다음과 같이 가리키는 대상에 대한 값의 변경이 허용되지 않는다.
*ptr = 20; //컴파일 에러 발생.
즉, const 선언이 앞에 있을 경우 포인터를 이용한 값의 변경을 허용하지 않겠다는 뜻이 된다.
※ 포인터를 이용한 값의 변경만을 허용하지 않을 뿐이다. 변수가 상수가 되는 건 아님.
한마디로, 포인터의 선언 앞에 const가 붙으면, 이 포인터를 이용해서는 값의 참조만 가능할 뿐 변경은 불가능!
ⓑ 변수 이름 앞에 있는 const의 의미.
int num = 10;
int* const ptr = #
이 선언은 포인터 변수 ptr을 상수화시킨다는 의미이다. 즉 포인터 변수 ptr에 저장된 값의 변경이 불가능해지는 것이다. 포인터 ptr은 끝까지 변수 num만 봐라보며 가리킨다. 해바라기
포인터와 관련된 두가지 형태의 const 선언은 각각 별개의 선언이다. 서로 별개의 선언이기 때문에 다음과 같이 선언하는 것도 가능하다.
int num = 10;
const int* const ptr = #
이렇게 선언된 포인터 변수 ptr은 두 가지 제약사항이 동시에 생기게 된다.
ⓐ 포인터 ptr을 이용해서는 ptr이 가리키는 변수의 저장된 값을 변경할 수 없다.
ⓑ 포인터 ptr은 끝까지 변수 num만 가리켜야 한다. ptr상수화
'Programming > C' 카테고리의 다른 글
메모리 컨트롤 함수. memmove, memcpy (0) | 2013.02.15 |
---|---|
volatile 과 restict (0) | 2013.02.15 |
힙에 할당된 메모리의 확장 시 호출하는 realloc 함수. (0) | 2013.02.15 |
typedef 를 이용한 이차원 배열 주소 값 반환 (0) | 2013.02.15 |
Bit Mask (비트 마스크) (0) | 2013.02.15 |