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 = #
ptr2 = #
*ptr1 = 10;
*ptr2 = 20;
'C와 C++' 카테고리의 다른 글
[C++][작성중] STL 큐, 스택 비교 (0) | 2018.02.07 |
---|---|
[C/C++] C언어 배열초기화 (0) | 2016.07.19 |