우선 int *ptr = &num과 같이 포인터변수를 선언하면
int *ptr = (int) ptr 임을 알아야한다.
예를들어 int p, q;과 같이 선언하면 p는 int형을 담는 포인터변수고, q는 int형이다.
- const int *
const int *ptr 은 (const int) *ptr과 의미적으로 같다. 즉,
ptr 포인터 변수는 const int 타입의 변수의 주소를 저장한다.
때문에
const int a = 6;
int *p = &a;
의 결과는 ERROR다.
p는 int형변수를 담는 포인터변수지, const int형을 담는 포인터변수가 아니다.
그래서
const int *p = &a;
이렇게 선언해야 정상적으로 작동한다.
- int *const
int *const ptr 은 int (*const ptr) 과 의미적으로 같다.
int형 포인터를 담는 const형 포인터다.
즉 주소값의 내용은 바꿀 수 있지만 주소값을 바꿀수는 없다.
p = &a;
int num = 5;
p = #은 불가능하지만
*p = 8; 은 가능하다.