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 |
---|