본문 바로가기

프로그래밍💻/C

Constant Pointer (상수 포인터)

C에는 포인터라는 무시무시한 녀석이 있따... 👉

const T*

int a = 10, b = 20;
const int* pa = &a;

*pa = 20;    // 불가능!
pa = &b;    // 가능!
a = 30;        // 가능!

const가 type 앞에 붙어있으면 포인터가 가리키는 변수의 값을 변경하지 못하게 한다.

물론, 가리키는 변수 자체의 값은 변경할 수 있다. 그리고, 가리키는 대상은 바꿀 수 있다. (pa = &b 이렇게)

 

이때, pa++ 할 수 있을까?

 

pa++;

pa = pa + 1;

YES.

 

언제 쓰이는가?

문자열로 많이 쓰인다. 특히, 함수의 parameter로 받을 때, 이 const char* 이 많이 쓰인다.

 

char str[] = "Hmm? why?";       // 리터럴로 초기화할 땐 되도록 pointer로.
char* str1 = "Dangerous!";      // 이렇게 선언하지 맙시다.
const char* str2 = "Safe!";     // 👍

str2 = "Can be changed!";       // 이런것도 됩니다.
str = "NO!";                    // 이건 안됩니다. 배열의 이름에 다른 값을 대입할 수 없어요.
str2[0] = 'F';                  // str2는 const pointer이기에 값을 변경할 수 없어요.

약간, 이렇게 하면 python의 string과 어느정도 유사해진 것을 알 수 있다. (immutable하니까...)

함수의 parameter로 쓰면, 함수 내부에서 그 포인터 변수를 바꾸지 않겠다는 의미이다. (약간 read-only?)

 

T* const

int a = 10, b = 20;
int* const pp = &a;

*pp = 20;    // 가능!
pp = &b;     // 불가능!

말 그대로, 포인터가 다른 변수를 가리키지 못하게 한다.

가리키는 변수의 값은 변경할 수 있다.

'프로그래밍💻 > C' 카테고리의 다른 글

🤔 About C-yntax  (0) 2021.07.09