변수와 상수의 구분
변수 : 선언 이후 값을 계속 바꿀 수 있는 저장 공간
상수 : 선언할 때 값을 할당 후, 값을 바꿀 수 없는 저장 공간 (const keyword로 표현)
리터럴 : 값 자체
const 위치에 따른 해석
const char* : 상수형 char에 대한 ptr. ptr이 가리키는 변수의 값을 바꿀 수 없다.
char const * : char에 대한 상수형 ptr. ptr이 다른 char를 가리킬 수 없다.
const char const * : 상수형 char에 대한 상수형 ptr. ptr이 다른 char를 가리킬 수 없고, 변수의 값도 바꿀 수 없다.
응용
다음 코드는 vulkan api의 VkInstanceCreateInfo 구조체와 구조체 초기화의 일부이다.
ppEnabledExtensionNames는 const char* const* 형 변수이다. (line 10)
glfwExtensions는 const char **형 변수이다.
glfwExtensions는 char에 대한 이중 포인터인데 이걸 상수화하였으므로
char value가 상수화된다.
ppEnabledExtensionNames에는 glfwExtensions의 값이 대입되기 때문에
char에 대한 이중 포인터가 된다.
이 이중 포인터가 가리키는 char value가 상수화되어 있으므로 const char,
이 이중 포인터를 상수화하기 위해 const*가 붙었다.
glfwExtensions와 ppEnabledExtensionNames 둘다 char** 인 상황에서,
glfwExtensions는 가장 하단의 char value가 상수라고 표현하는 것이고,
ppEnabledExtensionsNames는 char value가 상수는 동의하는데
자신이 가리키는(이중 포인터) 것도 바꾸지 않겠다는 것이다.
'컴맹 탈출기' 카테고리의 다른 글
[Sourcetree] 처음 로컬 프로젝트를 원격 저장소와 연동하기 (0) | 2024.05.01 |
---|---|
[Git GUI] SourceTree 연습 (0) | 2024.02.26 |
각종 하드웨어 지식 for OS (0) | 2023.09.20 |
[GitHub] 처음 원격 저장소에서 내 로컬 저장소로 프로젝트 받아올 때 (클론하는 법) (0) | 2023.08.06 |
가상머신 / 우분투 / UTM / Shell 등 많이 들어봤지만 정확히 모르는 용어들 (0) | 2023.03.16 |