C언어를 배우게 되면 const를 사용하는 것을 종종 볼 수 있는데 보통 있던 없던간에 동일하게 작동하는 경우도 있을 것입니다. 하지만 굳이 이런 const를 사용하는 의미가 있겠지요 코딩은 불필요한것을 싫어해서 하는건데 불필요한데 굳이 사용하는 이유가 있을 것입니다.
1
Const를 통한 포인터 변수 선언은, 해당 포인터변수가 가리키는 대상이 변하지 못하게 함을 의미
const int * ptr 형태
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
int main() {
int num = 10;
const int* ptr = #
//ptr이 가르키는 대상은 항상 num으로 고정됨 변경 못함
*ptr = 20;
return 0;
}
실제로 const를 통해서 선언한 포인터 ptr에다가 num을 간접참조하고 여기에다가 값을 변경할려고하니 비쥬얼 스튜디오 기준 C2166 I-value가 const 개체를 지정합니다 라고 하면서 컴파일이 안됩니다.
다만 ptr이 변경을 못하는 것일뿐 num에다가 const를 지정한 것은 아니기에 num값을 직접 바꾸는 것은 가능합니다.
int * const ptr 형태
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
#define MAX_SIZE 10
int main() {
int num = 10;
int* const ptr = #
*ptr = 20;
int num_a = 20;
ptr = &num_a;
//ptr은 처음 지정한 num이외에 다른 값을 참조할 수 없음
return 0;
}
이번에는 int*와 const 위치가 변경되었습니다. 하지만 이전과 다르게 *ptr = 20 값을 변경하는 것에는 에러가 나지 않지만
ptr이 다른 값을 새로 참조하는 것은 에러가 났습니다.
이 둘을 모두 사용하는 것도 가능합니다.
const int * const ptr 형태
이렇게 되면 ptr은 num값만 참조하고, num값의 변경도 불가능합니다.
Comments powered by Disqus.