변수를 상수로 만들때 사용하는 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];
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 |