본문 바로가기
  • 여행하고 먹는 즐거운 콘지의하루
프로그래머의 프로그래밍 이야기/C++ Programming

C/C++ const 키워드 위치

by 콘지 2022. 6. 15.

 

https://kunulee.tistory.com/13

 

C/C++ const/constexpr 키워드 사용법, 차이

안녕하세요 최근 misra C 코딩 룰셋을 따르다 보니 변경되지 않는 변수나, 초기화 후 변경 되지 않는 값임에도 변수로 설정되어 있는 경우 그 값을 상수로 설정하라는 경고가 나와서 const/constexpr

kunulee.tistory.com

안녕하세요, const 키워드와 constexpr의 차이점에 대한 부분은 다음 포스팅을 참조 하시고

이번에는 const 키워드의 두가지 위치에 대해서 간단하게 살펴 보겠습니다.

 

const는 상수 선언을 위해 필요한 키워드 입니다.

const는 보통 primitive type의 앞에 위치 하게 됩니다.

const int a = 10;

그러나 포인터의 경우에는 const 를 위치시킬 수 있는 부분이 두가지 입니다.

 

int a = 10; 

const int *fp = &a;
int* const lp = &a;

int a를 선언하고, int * 타입 fp, lp는 a의 주소값을 가리키고 있습니다.

const는 포인터의 앞에 올수 있고 포인터의 뒤에도 올수 있습니다. 

 

1. 포인터의 앞에 const 키워드가 있는 경우

일반적인 const의 의미와 같습니다. fp가 가리키는 값 자체에 대한 상수화를 합니다.

즉, *fp = 10; 와 같은 연산이 불가능 하다는 점이 특징이라고 할 수 있습니다만!

다음과 같은 연산은 가능합니다. 

1. a = 20; 

2. fp = b; 

와 같이 fp에 다른 주소를 넣는다거나 fp가 가리키는 변수의 값을 직접 바꾸는 작업이 가능합니다. 

 

2. 포인터의 뒤에 const  키워드가 있는 경우 

이 선언은 포인터 자체에 const 효과를 적용하는 방법으로 lp 포인터의 주소값을 변경할 수 없도록 상수화 시킵니다.

즉, fp = b;  와 같이 fp 포인터를 다른 주소값으로 변경하는 것이 불가능해 집니다만!

*fp = 10; 과 같은 연산은 가능합니다. 포인터의 주소값에 상수화를 했지, 

포인터의 주소값에 해당하는 실제 값은 상수화 하지 않았으니까요,

 

그렇다면 이 모든것을 상수화 하고 싶다면 어떻게 해야 될까요? 

 

int a = 10;
const int * const ap = &a;

네 맞습니다. 앞뒤에 전부 const 를 기입 하면 되겠네요 

복잡하지만, 확실한 방법이므로 소개해드립니다.

 

반응형

댓글