CafeM0ca

[C]const 포인터 본문

Programming/C

[C]const 포인터

M0ca 2017. 11. 28. 14:42
반응형

int n1=10,n2=20;

const int *p1 = &n1;  // p1값 변화(o) / *p1값 변화(x)

int const *p2 = &n2;  // p2값 변화(x) / *p2값 변화(o)

int * const p2==int const *p2


긴말없이 이렇게 알면 간단명료하다.

p1의 값은 p1이 가르키는 주소.

*p1의 값은 p1이 가르키는 주소의 값.


좀 더 이해하기 쉽게 접근하자면


왼쪽으로 읽는 방법이 있다.

예를 들면 

const int *p1 = &n1;에서

변수 이름은 짜르고보자.

const int *

*의 왼편에는 const가 없다. 그러므로 p1의 역참조값은 바뀔 수 있다.

int의 왼편에는 const가 있다. 그러므로 p1이 가리키는 주소는 바뀔 수 없다.


좀 더 복잡한 선언을 보자.

const int const * const * * const * tptr = tarr[][][];

기가막힌 선언이다.

그러나 위에서 했던것처럼 접근해보자.

const int const * * const * // * 왼쪽에 const가 있다. 따라서 tarr[z][y][x]의 x의 역참조값은 바꿀 수 있다.

const int const * * const * // * 왼쪽에 const가 없다. 따라서 tarr[z][y][x]의 y의 역참조값은 바꿀 수 있다.

const int const * * const * // * 왼쪽에 const가 있다. 따라서 tarr[z][y][x]의 z의 역참조값은 바꿀 수 없다.

const int const * * const * // int 왼쪽에 const가 있다. 따라서 tarr[z][y][x]를 가리키는 tptr의 값은 못바꾼다.




반응형

'Programming > C' 카테고리의 다른 글

[C] X11 라이브러리 설치  (0) 2019.11.25
[C]별찍기  (0) 2018.01.12
[C]시저암호(카이사르암호)  (0) 2017.11.19
[C] fwrite,fread  (0) 2017.11.08
[C]union,enum  (0) 2017.11.08
Comments