Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 캐스팅연산자
- PointableCanvasModule
- 게임제작
- 바이브코딩
- VR플랫폼
- 캐시 메모리 사상
- 2D
- DAIVerse
- 게임은 문화
- Unity
- js
- C++
- handtracking
- OculusInteractionSamplesRayCanvas
- linux
- 클린 아키텍처
- 유니티
- 동적 힙
- 메모리
- 온라인
- C언어
- 스펙주도형개발
- 게임
- 5G에그
- VR
- 파일패킹
- 게임개발
- MacFilter
- TCP
- PHOTON
Archives
- Today
- Total
kunyoungparkk
[C&C++] const 키워드 본문
const는 변수를 상수화시켜주는 키워드이다.
(msdn왈, const 변수의 값이 상수임을 지정하고 프로그래머가 수정하지 못하도록 컴파일러에 지시하는 키워드)
그렇다면, const 변수가 선언된 메모리를 참조해서 값을 바꾸면 어떻게 될까?
int main()
{
const int a = 5; //a const로 선언
int b = 4; //b 변수 선언
int* c = &b;
c= c-2; //포인터 c로 a의 메모리 영역을 가리키게 한다.
*c = 2; //a의 메모리 공간을 2로 바꾼다.
printf("%d\n", a); //a값을 출력한다.
printf("%d\n", *c); //c 포인터가 가리키는 값을 출력한다.
return 0;
}
이 코드를 실행하면, 실제로 메모리 공간이 바뀐다.
그러나, 컴파일러에서 a를 상수 5로 처리하기 때문에, a의 값은 그대로 5로 처리된다.
00C2108D mov dword ptr [ebp-4],eax
const int a = 5;
00C21090 mov dword ptr [a],5
int b = 4;
00C21097 mov dword ptr [b],4
int* c = &b;
00C2109E lea eax,[b]
00C210A1 mov dword ptr [c],eax
c= c-2;
00C210A4 mov ecx,dword ptr [c]
00C210A7 sub ecx,8
00C210AA mov dword ptr [c],ecx
*c = 2;
00C210AD mov edx,dword ptr [c]
00C210B0 mov dword ptr [edx],2
printf("%d\n", a);
00C210B6 push 5 //a의 메모리 공간에서 불러오지 않고, 상수로 처리한다.
00C210B8 push 0C22100h
00C210BD call printf (0C21040h)
00C210C2 add esp,8
printf("%d\n", *c);
00C210C5 mov eax,dword ptr [c]
00C210C8 mov ecx,dword ptr [eax]
00C210CA push ecx
00C210CB push 0C22104h
00C210D0 call printf (0C21040h)
00C210D5 add esp,8
return 0;
00C210D8 xor eax,eax
실제로 a 변수를 출력시 5가, c 포인터가 가리키는 메모리공간은 변경된 2로 출력된다.

const int * ptr과 int * const ptr의 차이 :
*ptr을 상수화 시키느냐, ptr을 상수화 시키느냐의 차이이다.
'C++' 카테고리의 다른 글
| [C/C++] 라이브러리 (0) | 2023.05.10 |
|---|---|
| [C++] 모던 C++(C++11) 기초 (1) | 2023.05.09 |
| [C/C++] 소켓 API (0) | 2023.04.06 |
| [C++] 템플릿 (0) | 2022.01.07 |
| [C++] 형 변환 연산 (0) | 2022.01.07 |