C와 C++

const char * / char * const / char const * 차이

Groo 2018. 5. 16. 10:27

const char * / char * const / char const * 차이


함수 원형을 보다보면 인자에 const 가 붙는 경우가 있다.


대표적인 예로 printf 


#include <stdio.h>

int printf(const char *format, ...);

// 리턴값 : 출력에 성공한 문자 수

 


그리고 execl과 execv


#include <unistd.h>


int execl (const char * pathname, const char * arg0, ..., /* (char *) 0 */);

int execv (const char * pathname, char * const argv[]);


// 리턴값 : 리턴하지 않음. 에러 시 -1을 리턴

 





그래서 정리를 하게 됨


먼저 const 란?

상수화 시킨다는 뜻의 키워드로, 처음 정해진 값을 변경할 수 없다.



1. const char * ptr

2. char const * ptr


둘 다 ptr 앞에 *가 붙어있다고 보면 된다.

const char (* ptr)

char const (* ptr)


따라서 ptr이 가리키는 곳(데이터)을 바꾸려고 하면 에러가 발생.


3. char * const ptr

ptr 앞에 *이 아닌 const가 붙어있다.

char * (const ptr)


따라서 'ptr 자체가 상수' 라고 생각하면 된다.

ptr의 값, 즉 ptr은 포인터 변수이므로 ptr 변수에 저장된 어딘가를 가리키는 주소값을 변경하려고 하면 에러 발생.



[예제]

다음 코드를 컴파일 시 에러가 나는 라인은?


const char * ptr1;

char * const ptr2;

int num = 0;


ptr1 = &num;

ptr2 = &num;


*ptr1 = 10;

*ptr2 = 20;