포인터 변수를 정의 할때는 const를 최대2개까지 포함 할수 있음.(포인터 변수자체에 보관된 정보, 포인터가 가리키는변수에 보관된 정보)
Const 속성이 전혀 적용되지 않은포인터 int i1 = 10;
int i2 = 20;
int* p = &i1;
p = &i2; //OK
*p = 30; //OK
05 : 포인터 변수에 변수에 값을 대입(const 여부에 따라서 오류가 날수 있음)
06 : 포인터가 가르키는 변수에 값을 대입(const 여부에 따라서 오류가 날수 있음)
포인터가 가르키는 변수가 const 인 경우 int i1 = 10;
int i2 = 20;
const int* p = &i1;
p = &i2; //OK
*p = 30; //Fail
p가 가르키는 변수는 const int 타입이라는 의미(=06번째 줄처럼 p가 가르키는 변수의 값을 변경하는 것을 허용하지 않음)
포인터 자체가 Const 인 경우
int i1 = 10; int i2 = 20; int* const p = &i1; p = &i2; //Fail *p = 30; //OKint 타입을 가리키는 p는 const 속성을 갖는다라는 의미(=05번째 줄 처럼 p의 값을 바꾸는 행위는 허용하지 않음, p라는 포인터 변수는 const지만 p가 가르키는 변수는 const가 아니므로 포인터가 가르키는 변수의 값을 변경하는 것은 가능.)
포인터를 가르키는 변수도 const 포인터 변수도 const
int i1 = 10; int i2 = 20; const int* const p = &i1; p = &i2; //Fail *p = 30; //Fail포인터 p와 p가 가르키는 변수까지도 const(따라서 05,06 Line 모두 Error)