본문 바로가기

프로그래밍언어팁

C언어의 상수포인터 표기법 읽기

포인터 표기법에서 const가 붙게 되면 포인터와 포인터가 가리키는 것 중 어느 것이 상수가 되는지 이해하는 것이 중요하다.
아래의 방법으로 읽으면 쉽게 이해할 수 있다.

포인터 심볼인 * 를 기준으로 읽는다. * 를 pointer to 라고 읽으면 쉽게 이해 된다. 


  1. int * ptrA - ptrA is pointer to int. ( ptrA는 int 를 가리키는 포인터 )
  2. int const * ptrA - ptrA is pointer to const int ( ptrA 는 const int를 가리키는 포인터 )
  3. int * const ptrA - const ptrA is pointer to int ( const ptrA 는 int 를 가리키는 포인터 )
  4. int const * const ptrA - const ptrA is pointer to int const ( const ptrA 는 int const 를 가리키는 포인터 )

위의 표기법에서 2, 4번은 아래와 같이 변경하여 표기할 수 있다.

  • int const * ptrA == const int * ptrA - ptrA is pointer to const int.
  • int const * const ptrA == const int * const ptr

2중 포인터와 const 표시도 쉽다. * 를 pointer to 로만 읽으면 되기 때문이다.

  • int ** ptrA - ptrA is pointer to pointer to int
  • int ** const ptrA - const ptrA is pointer to pointer to int
  • int * const * ptrA - ptrA is pointer to const pointer to int
  • int const ** ptr - ptr is pointer to pointer to int const
  • const int ** ptr - ptr is pointer to pointer to const int
  • int * const * const ptr - const ptr is pointer to const pointer to int
* 를 기준으로 const가 왼쪽에 있으면 포인터가 가리키는 것이 상수가 되는 것이고 const가 오른쪽에 있으면 포인터가 상수가 되는 것이다. const가 양쪽 모두 있다면 포인터와 포인터가 가리키는 것 모두 상수가 된다