C Programming


C 프로그래밍 const (상수) 에 대하여 



상수(Constant)는 변수의 반대(?) 개념으로 생각하면 될듯하다. 즉 변수는 상황에 따라 그 값이 변경가능하지만 상수인 const 로 지정을 하면 그 값을 '절대로' 바꿀수 없다

또한 변수와는 달리, 처음 상수를 정의할 때 값을 지정해 주어야 한다. 


const (자료형) (상수 명) = (상수 값); 


다음과 같은 소스에서 


#include <stdio.h>


const int MAX_VAL = 1000;


int main(void) {

printf("%d \n" , MAX_VAL);

}


상수 값 MAX_VAL 를 1000으로 지정해 준 후, 값을 변경해 보면 


assignment of read-only variable 'MAX_VAL' 라는 에러 메세지가 뜬다. 출력은 되는데, 값은 변하지 않고 여전히 1000의 값이 출력 되는 것을 확인할 수 있다. 


위의 에러 메세지는 읽기 전용 변수에 접근했다는 에러이며, 상수로 정의된 값을 변경할 수 없다는것을 나타낸다. 


그러나, 위의 예에서는 const가 자료형의 앞에 붙었는데, 반대로 자료형의 뒤에 붙을 수도있다. 

이럴경우, 어떤 차이가 있을까? 

다음 예를 살펴보자 


  포인터와 const 


__자료형 앞에 붙는경우

int main(void) {

int a = 10;

int b = 20;

const int* c = &a;


printf("%d \n" , *c);


*c = 100;  //에러난다

c = &b; //이건 됨


printf("%d \n" , *c);

}


위의 경우는 c는 정수형 포인터이며, 앞에 const가 붙음으로써, c는 상수만을 가리키는 포인터라는 의미가 된다. 따라서, c가 가리키는 대상은 변경이 가능하지만, 가리키는 값은 변경 할 수 없다. 


__자료형의 뒤에 붙는 경우 

int main(void) {

int a = 10;

int b = 20;

int* const c = &a;


printf("%d \n" , *c);


*c = 100;  //이건 정상

c = &b; // 이건 에러


printf("%d \n" , *c);

}


반대로, 자료형의 뒤에 붙는 경우는, const가 자료형의 뒤에 붙음으로써 c는 정수형 변수를 가리키는 상수형 포인터가 된다. 따라서, 포인터가 가리키는 위치는 변경 할 수 없고, 가리키는 값은 변경이 가능하다. 





이렇듯, const의 위치에 따라 소소한 차이점이 있지만, 자료형의 앞에 const를 선언하는 것이 일반적이다. 

Posted by naddru

댓글을 달아 주세요

  1. Hojong 2015.12.01 01:59 신고  댓글주소  수정/삭제  댓글쓰기

    쉽게 잘 설명되어있는 글 잘 읽고 갑니다.