Park Donghyeon Mar 12, 2018 2018-03-12T18:00:00+09:00
Jul 26 2021-07-26T06:45:01+09:00 3 min
변수를 선언할 때 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의 오른쪽을 상수화 한다.