포인터는 개념은 많지만 그리 어렵지 않으며, C 프로그래밍에서 매우 중요한 역할을 합니다. 이번 글에서는 포인터 산술 연산 중 핵심 두 가지인 포인터 덧셈과 포인터 뺄셈을 예제 코드와 함께 자세히 살펴보겠습니다.
C 포인터 덧셈이란?
포인터 덧셈이란 포인터 변수에 특정 값을 더하는 연산을 의미합니다. 여기서 주의할 점은 포인터에 숫자를 더하면 단순히 바이트 주소가 더해지는 것이 아니라, 해당 데이터 타입의 크기만큼 곱해져 더해진다는 것입니다.
계산 공식은 다음과 같습니다.
new_address = current_address + (number * size_of(data type))
포인터 덧셈 예제
다음은 C 언어에서 포인터 덧셈을 수행하는 프로그램입니다.
#include<stdio.h>
int main(){
int num=500;
int *ptr; // 정수형 포인터 선언
ptr=# // num 변수의 주소를 저장
printf("add of ptr is %u \n",ptr);
ptr=ptr+7; // 포인터 변수에 7을 더함
printf("after adding add of ptr is %u \n",ptr);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
add of ptr is 6422036 after adding add of ptr is 6422064
출력 결과를 보면 포인터에 7을 더했을 때 주소가 28바이트 증가했습니다. 이는 int 타입의 크기가 4바이트이므로 7 × 4 = 28바이트가 더해진 것입니다.
C 포인터 뺄셈이란?
포인터 뺄셈은 포인터 변수에서 특정 값을 빼는 연산입니다. 포인터 변수에서 임의의 수를 빼면 새로운 메모리 주소가 계산되며, 덧셈과 마찬가지로 데이터 타입의 크기가 곱해져 반영됩니다.
계산 공식은 다음과 같습니다.
new_address = current_address - (number * size_of(data type))
포인터 뺄셈 예제
다음은 C 언어에서 포인터 뺄셈을 수행하는 프로그램입니다.
#include<stdio.h>
int main(){
int num=500;
int *ptr; // 정수형 포인터 선언
ptr=# // num 변수의 주소를 저장
printf("addr of ptr is %u \n",ptr);
ptr=ptr-5; // 포인터 변수에서 5를 뺌
printf("after sub Addr of ptr is %u \n",ptr);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
addr of ptr is 6422036 after sub Addr of ptr is 6422016
결과를 확인해 보면 포인터에서 5를 뺐을 때 주소가 20바이트 감소했습니다. 역시 int 타입이 4바이트이므로 5 × 4 = 20바이트가 빠진 것입니다.
정리
포인터 산술 연산은 데이터 타입의 크기를 기준으로 주소가 이동한다는 점이 핵심입니다. 배열 순회나 동적 메모리 관리 등 실무에서도 자주 활용되는 개념이므로, 위 예제들을 직접 실행하며 익혀두는 것이 좋습니다.