Posts C/C++ 포인터의 const 쉽게 이해하기
Post
Cancel

C/C++ 포인터의 const 쉽게 이해하기

변수를 선언할 때 const를 붙이면 그 변수를 상수로 만드는 효과가 있다. const의 위치에 따라 다른 역할을 하는데, 규칙은 간단하다. 오른쪽에 있는 부분을 상수화 한다

1
2
const int num = 10;
int* const p = #

변수 num, p은 상수화 되어 다른 값으로 변경할 수 없다.

Rule: const 오른쪽에 있는 부분을 상수화 한다.

싱글 포인터 변수에서 const가 올 수 있는 위치

1
2
3
4
_ int _ * _ p = &a;
// _ 부분에 const가 들어갈 수 있다. 아래처럼 중복도 가능
// const int const * const p = &a;
// *p 변경 불가, p 변경 불가


  • const int *p
  • int const *p. *p를 상수화 한다. 위의 두 개가 같다.
1
2
3
4
5
6
int a = 10;
int b = 20;
int const *p = &a; // const int *p 와 같다

*p = 30;  //(x)
p = &b;   //(o)


  • int * const p. p를 상수화 한다.
1
2
3
4
5
6
int a = 10;
int b = 20;
int * const p = &a;

*p = 30;  //(o)
p = &b;   //(x)


  • int const * const p. *p와 p를 상수화 한다.
1
2
3
4
5
6
int a = 10;
int b = 20;
int const * const p = &a;

*p = 30;  //(x)
p = &b;   //(x)


더블 포인터 변수에서 const가 올 수 있는 위치

1
_ int _ * _ * _ ppa = &pa;  //_ 부분에 const가 들어갈 수 있다.


  • const int **pp
  • int const **pp. **pp를 상수화 한다. 위의 두 개가 같다.
1
2
3
4
5
6
7
8
9
int a = 10;
int b = 20;
int* pa = &a;
int* pb = &b;
int const **pp = &pa; // const int **pp 와 같다

**pp = 30; //(x)
*pp = &b;  //(o)
pp = &pb;  //(o)


  • int* const *pp. *pp를 상수화 한다.
1
2
3
4
5
6
7
8
9
int a = 10;
int b = 20;
int* pa = &a;
int* pb = &b;
int const **pp = &pa;

**pp = 30; //(o)
*pp = &b;  //(x)
pp = &pb;  //(o)


  • int** const pp. pp를 상수화 한다. ```c int a = 10; int b = 20; int* pa = &a; int* pb = &b; int const **pp = &pa;

**pp = 30; //(o) *pp = &b; //(o) pp = &pb; //(x)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<br>

* `int* const * const pp`
*pp, pp를 상수화 한다.
```c
int a = 10;
int b = 20;
int* pa = &a;
int* pb = &b;
int const **pp = &pa;

**pp = 30; //(o)
*pp = &b;  //(x)
pp = &pb;  //(x)


  • const int * const * const pp
  • int const * const * const pp *pp, *pp, pp를 상수화 한다. ```c int a = 10; int b = 20; int pa = &a; int* pb = &b; int const **pp = &pa;

**pp = 30; //(x) *pp = &b; //(x) pp = &pb; //(x) ```

결론 const의 오른쪽을 상수화 한다.

This post is licensed under CC BY 4.0 by the author.

CMake built-in 변수 확인하기

터미널을 간지나게 써보자