#include<stdio.h>
int main()
{
// 기본원리 : const 바로 뒤에 붙은 애는 변경할 수 없다.
//1, " const type * 변수" 형태 ( type 앞에 const 가 붙을 때 )
int i =10, j =20;
const int *p = &i;
printf("%d\n",*p); // 10
p = &j;
printf("%d\n",*p); // 20
/* 설명
*p를 상수로 고정한다는 것이다. 즉, *p는 무조건 고정된 값이고,
설령 *p 혹은, p를 바꾸고 싶다고 하더라도 *p는 변경할 수 없다
즉, 만약 *p 혹은 p 를 변화시키고자 한다면 p 를 변화시켜야 한다
예를 들어,
*p = j ; 이렇게 하면 error 가 뜬다
위의 코드를 보면,
*p 가 처음에는 i 를 출력하고 있었다.
그러나 *p 가 j 를 출력하게 끔 변화를 주고 싶었다.
제일 쉬운 방법은 *p = j 라고 하는 것이겠지만,
말했듯이, *p 는 고정된 값으로, 변화가 불가능
그러므로 p = &j; 와 같이
p 를 통해 포인터 p 가 가리키는 주소값을 i에서 j 로 바꿔주는 우회로를 택한 것이다.
*/
// 2. " type * const 변수 " 형태 ( type 앞에 const 가 붙을 때 )
double d =7.8, e = 2.7;
double * const pd = &d;
printf("%f\n", *pd ); // d 출력
*pd = e;
printf("%f\n",*pd); // e 출력
/*
이번에는 pd를 고정시킨 것이다. 위에서는 *(포인터)를 같이 고정시켰지만,
이번에는 주소값만을 가리키는 pd 를 고정시킨 것.
그러므로 pd 가 가리키는 값 , 혹은 *pd 가 가리키는 값을 변화시키려면
*pd 를 통해 변환시켜야 하는 것이다.
위의 코드에서는 e 를 d 로 변화시킨 것을 알 수 있다.
*/
return 0;
}