프로그래밍/C언어

const 키워드

콘파냐 2013. 5. 18. 12:31
반응형

const키워드의 기본적인 기능은 상수의 정의이다.

사용법

const int i = 7; // 변수 i가 정수 7로 상수가되었다.

int arr[i]; // 배열의 인수로 상수만 와야한다. i에 const 선언을 하지않을경우 error 발생

 

const는 선언과 동시에 초기화 해준다.

선언만 하는 경우는 참조상수화를 하는경우이다.

예를들어 함수내에서 외부변수를 인수로 갖을때 const를 사용하면 외부변수를 참조하되 변경을 하지않도록하는 안전장치로 const 키워드를 사용한다.

 

**법칙1 const 상수의 주소값을 읽는것은 에러

const값을 읽는다는것은 그 참조대상을 변경할수있는 가능성을 주는 행위이다. 그러므로 봉쇄된다.

 

다음예를보자

const int i = 7;

int *pi;

pi=&i; //에러가남

*pi=9;

printf("%d"",i); // printf("%d", *pi);

 

에러포인트는 상수의 주소값을 읽는 행위이다. 법칙1에 의해서 에러가난다.

 

한가지 편법이있다.

pi=(int*)&i; 이경우 에러는 안남

캐스팅을 하면 된다.

그럼 두 출력문을 보자. 주소값이 일치하는데 값이 다르다.

i의 값은 변하지 않았다.

내 나름대로 결론을 내리자면 변수 i의 값을 7이라고 고정적으로 기억하는 것같다.

강제적 문법으로 주소값을 참조해서 값을 바꿀수 있지만 최종적으로 i 는 7이라고 확인하는 것같다.

 

두번째예

int i = 7;

const int *pi;

pi=&i; // 여기까진 이상없다.

 

int* ti;

ti=(int*)pi;

*ti = 10;

 

printf~~//*pi와 *ti 값의 출력

 

어떤가 둘다 바뀌었다.

*pi 의 값이 바뀐 것이다.

 이경우 첫번째처럼 최종적으로 i =7이라고 확인을 하지않았다.

결국 const는 좌변과 우변 모드를 확인하는 키워드이다.

초기값을 지정하는 const의 사용의 경우는 최종적으로 값의 변경이 막혔지만,

참조하는경우(예를 들어 함수로 넘기는 경우 const 키워드를 쓰더라도 값의 변경이 가능한것이다.)

편법이긴 하지만 말이다... 어쩔수없을 경우 써먹을 일이 있을지모른다.

반응형