프로그래밍/C언어

[C언어]포인터 상수와 상수 포인터(const int* 와 int* const)

FORHAPPy 2021. 9. 7. 16:33

<포인터 해석하기 :  뒤에서 부터 읽어 나간다.>

int *ptr  ( ptr은 + 가르킨다(*) +int형을 ) ptr은 int형의 무언가를 가르킴 (주소를 저장하여 가르킴)
ptr이 가르키는건 int형 무언가
int const *ptr (ptr은 + 가르킨다(*) + int const 형을)
=const int *ptr
ptr은 const int형의 무언가를 가르킴
ptr이 가르키는건 const int형 무언가 
(ptr이 가르키는 건 변할 수 없음)
int *const ptr (const ptr은 + 가르킨다(*) + int 형을) const ptr(변하지 않는 값을 가진 ptr)은 int형의 무언가를 가르킴
const ptr이 가르키는건 int형 무언가 
(ptr의 값 즉, 저장된 주소값을 변하게 할 수 없음.)

 

<예제1: 상수포인터>

int a = 10; int b;
const int* ptr;
ptr = &a;
*ptr = 20;  >> ptr이 가르키는 값을 변경 할 수 없음
ptr = &b; >> ptr에 저장되는 주소값은 변경 할 수 있음

<예제2: 포인터 상수>

int a = 10; int b;
int * const ptr;
ptr = &a;
*ptr = 20;  >> ptr이 가르키는 값을 변경 할 수 있음
                    (ptr의 주소가 바뀌지 않으므로 가능)
ptr = &b; >> ptr에 저장되는 주소값은 변경 할 수 없음

 

'프로그래밍 > C언어' 카테고리의 다른 글

[c언어] 구조체 선언 과 초기화  (0) 2021.09.30
[C++, C] 문자열  (0) 2021.09.17
[C언어]위키백과 연산자  (0) 2021.09.16
[C언어]typedef와 구조체  (0) 2021.09.05