[C언어] 포인터, const 키워드

const 키워드를 포인터 앞에 붙이면  포인터를 상수화 한다.


포인터 자체를 상수화.

포인터가 가리키는 변수를 상수화.


이 두가지 의미가 있다.



1. 포인터가 가리키는 변수의 상수화.


int a = 10;

const int* p = &a;

*p = 30 ; //안됨.

a = 30;   //가능.


포인터 p가 가리키는 변수의 값을 못 바꾸게 하겠다는 의미.

a자체가 상수화 되는 것이 아니고, 포인터 p를 통해서 변수 a값을 변경하는 것을 막는다.


2. 포인터 상수화


int a = 10;

int b = 20;

int* const p = &a;

p = &b;  // 오류

*p = 30; //된다.


포인터 p가 지니는 주소 값을 변경 할 수 없다는 뜻이다.




따라서, 포인터도 상수화 시키고, 포인터가 가리키는 데이터도 상수화하려면?


const int* const p = &a;



void print(const int* ptr)
{

int *p = ptr;    //에러.

}


ptr은 const 키워드에 의해서 상수화 되어있다.

이는 print 함수 내에서 ptr이 가리키는 변수의 조작을 허용 않겠다는 의미.

따라서, int* 로의 대입이 허용되지 않는다.