C언어

const 포인터( pointer )

고요한하늘... 2014. 6. 25. 13:53

변수를 상수로 만들때 사용하는 const 명령어

const 명령어와 pointer가 만났을때 처리 내용을 살펴보면 다음과 같다.


pointer 라는 것은 주소를 가르킬수도 있고 주소가 가르키는 곳의 값을 읽을수도 있다.

주소를 assign할때는

int b  = 10;

int * p = &b 처럼 처리하고

주소의 값을 읽어올때는

*p 로 값을 읽어 올수 있다.



값의 상수화

int main()

{

    int arr[1024];

    const int* p1 = &arr[0];

    p1++;

    *p1=0; //error

    arr[0]=100;

}


여기서 p1가 포인터인데 

p1 자체는 변수의 주소를 가르키고 *p는 변수의 값을 의미한다.


여기에 const를 대입하면 다음과 같다.

포인터가 가르키는 주소의 값을 상수화 할때

const int * p1 = &arr[0];

const int * p1 = const  * p1 ;

*p1 를 const시킨다고 읽으면 되겠다.

즉 *p1 를 변경시킬수 없기 때문에

*p1 = 10; 처럼 값을 assign하면 error가 난다.



주소의 상수화

int main()

{

    int arr[1024];

    int* const p2 = &arr[0];

    p2++; //error

    *p2=0;

}


포인터가 가르키는 주소를 상수화 할때

int * const p = &arr[0];

int * const p2  = const p2

는 포인터 p2 자체를 const화 시킨다는 의미이기 때문에

*p2 = 10;처럼 값을 assign하는 것은 가능하지만

p2 = &b;처럼 p2에 다른 변수의 address를 assign하게 되면 에러가 난다.



'C언어' 카테고리의 다른 글

mmap 삽질  (0) 2014.11.14
sort backslash  (0) 2014.08.19
suggest parentheses around assignment used as truth value  (0) 2014.06.11
valgrind test  (0) 2014.06.03
memchr vs strchr  (0) 2014.04.15