포인터와 const


const는 변수를 상수화 시키는 키워드다.

변수를 상수화 시킨다는 말은 변수의 값이 변경 되지 않게 한다는 뜻이다.

한번 초기값이 설정된 변수 값은 변수 사용 범위 내에서 계속 변하지 않는다.

포인터에서 const는 두 가지 의미를 부여 할 수 있다.

하나는 포인터가 가리키는 값을 상수화 하는 것이고 다른 하나는 포인터 변수값 즉 주소 값을 상수화 시키는 것이다.



포인터가 가리키는 값 상수화 방법


결론 부터 보자

int value = 10;

const int *a = &value;


int 앞에 const가 선언되면 포인터가 가리키는 변수가 상수가 되어 아래와 같은 동작을 한다.


int value = 10;

const int *a = &value;

*a = 30; //오류 발생

value = 30; // 변경 가능


value 변수값을 직접 변경이 가능하나 포인터의 값을 변경 하려고 하면 오류가 발생한다.



포인터 상수


결론 부터 보자

int value = 10;

int value2 = 20;

int const *a = &value;


int 뒤에 const가 선언되면 포인터가 상수가 되어 아래와 같은 동작을 한다.


int value = 10;

int value2 = 20;

int * const a = &value;

a = &value2; //오류 발생

*a = 30; // 변경 가능


포인터가 가리키는 value 변수값을 포인터값을 통해 변경이 가능하나 포인터를 변경 하려고 value2의 주소값을 대입하면

오류가 발생한다.





#include <stdio.h>


int main()

{

int value = 10;

int value2 = 20;

int * const a = &value;

const int *b = &value;


//포인터 상수 결과

//=======================================

a = &value2; // 오류 발생 (1)

*a = 30; // 변경 가능

//=======================================


//포인터가 가리키는 값 상수 결과

//=======================================

*b = 30; //오류 발생 (2)

value = 30; // 변경 가능

//=======================================

}


위의 예제를 컴파일 하면 다음과 같은 오류가 발생 한다.


오류 발생 (1) ---> error C3892: 'a' : const인 변수에 할당할 수 없습니다.

 오류 발생 (2) ---> error C3892: 'b' : const인 변수에 할당할 수 없습니다.


반응형

'프로그램 > C' 카테고리의 다른 글

[C] 구조체 배열과 포인터  (0) 2017.07.31
[C] 구조체  (0) 2017.07.24
[C] Call-By-Value와 Call-By-Reference  (0) 2017.07.22
[C] 포인터와 배열  (0) 2017.07.19
[C] 시간차이 구하기 ( millisecond 까지.. )  (0) 2017.07.16

+ Recent posts