본문 바로가기

Programming/C Language

포인터 연산

포인터를 대상으로 메모리의 접근을 위한 * 연산 외에도 증감 연산도 가능하다.
이번에는 연산의 결과를 눈여겨 보자.


포인터 변수에는 주소값을 담고있다.
즉 , 자료형의 크기에 따라 연산이 진행된다.


예제를 살펴보자.




코드를 분석하고 결과값을 예상해보자

직접 짜보고 눈으로 확인하길 바란다 . 결과값은 각자....ㅎㅎ

결론만 얘기하겠다.

포인터를 대상으로 하는 증감 연산의 결과는 다음과 같다.

int형 포인터 대상으로 n 증가                n * sizeof(int)의 크기만큼 증가

double형 포인터 대상으로 n 증가           n* sizeof(double)의 크기만큼 증가


감소연산 또한 똑같은 값으로 감소한다.


위 내용을 일반화 시켜보면
" TYPE형 포인터를 대상으로 n의 크기만큼 값을 증가 및 감소 시 , n x sizeof(TYPE)의 크기만큼 주소 값이 증가 및 감소한다. "


이러한 포인터의 연산특성을 중심으로 다음 예제를 보자.





6행에 선언된 포인터변수 ptr은 int형 포인터이므로 값을 1 증가시키는 연산을 할 때마다 실제로는 4씩 증가한다.

때문에 , *ptr , *ptr+1 , *ptr+2 참조결과 출력시 arr[0] , arr[1] , arr[2]에 저장된 요소가 출력된 것이다.


여기서 얻는 가장 중요한 결론은 arr[i] = *(arr+i) 라는 점이다!


배열의 이름과 포인터 변수는 변수냐 상수냐의 차이일뿐 , 사실상 동일하다

'Programming > C Language' 카테고리의 다른 글

Call By Value & Call By Reference  (0) 2017.11.01
포인터 배열  (0) 2017.11.01
포인터와 배열의 관계  (0) 2017.10.31
포인터 정리  (0) 2017.10.31
char형 배열 , 문자열  (0) 2017.10.31