본문 바로가기
IT/c언어

C 언어 포인터 산술 연산

by 뉴코딩맨 2023. 7. 12.
포인터 산술 연산은 C 언어에서 포인터 변수에 대해 수행할 수 있는 유효한 산술 연산의 집합입니다. 포인터 변수는 메모리 주소를 저장하며, 이러한 주소에 대해 산술 연산을 수행할 수 있습니다. 포인터 산술 연산은 주소에 대한 증가, 감소, 덧셈, 뺄셈 및 비교 연산을 포함합니다.
 
 

포인터 산술 연산의 동작

주소 증가 및 감소: 포인터 변수는 메모리 주소를 가리키므로, 포인터에 정수 값을 더하거나 뺄셈을 수행하여 주소를 증가시키거나 감소시킬 수 있습니다. 이렇게 주소를 조작함으로써 다음 또는 이전 메모리 위치를 가리킬 수 있습니다.
 
포인터 간 덧셈 및 뺄셈: 포인터 변수 간의 덧셈 또는 뺄셈을 수행할 수 있습니다. 이 경우 포인터 간의 거리를 계산하여 해당 거리만큼 이동한 주소를 가리키는 새로운 포인터를 생성합니다.
 
비교 연산: 포인터 변수 간의 비교 연산도 가능합니다. 포인터의 주소 값을 비교하여 크기나 동등성을 판단할 수 있습니다.
 

포인터 산술 연산의 예제

아래의 예제를 통해 포인터 산술 연산의 사용법을 이해해보겠습니다.
 
#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30, 40, 50};
    int *ptr = arr; // 배열의 첫 번째 요소를 가리키는 포인터

    // 포인터 증가
    ptr++;
    printf("다음 요소의 값: %d\n", *ptr);

    // 포인터 감소
    ptr--;
    printf("이전 요소의 값: %d\n", *ptr);

    // 포인터 간 덧셈
    int *sumPtr = ptr + 2;
    printf("두 요소 뒤의 값: %d\n", *sumPtr);

    // 포인터 간 뺄셈
    int *subPtr = ptr - 1;
    printf("이전 요소의 값: %d\n", *subPtr);

    // 포인터 비교
    int *ptr2 = arr + 2;
    if (ptr == ptr2) {
        printf("두 포인터는 같은 위치를 가리킵니다.\n");
    } else {
        printf("두 포인터는 다른 위치를 가리킵니다.\n");
    }

    return 0;
}
 
위의 예제에서는 정수형 배열 arr을 선언하고, 이 배열의 첫 번째 요소를 가리키는 포인터 ptr을 선언합니다. 이후 포인터 산술 연산을 통해 포인터를 증가시키고, 감소시키며, 덧셈과 뺄셈을 수행하여 다른 요소를 가리키도록 합니다. 마지막으로 포인터 간의 비교를 수행하여 두 포인터가 같은 위치를 가리키는지 확인합니다.
 
 

결론

C 언어에서 포인터 산술 연산은 포인터 변수를 이용하여 주소를 조작하고, 포인터 간의 산술 연산을 수행함으로써 메모리 위치를 이동하는 데 사용됩니다. 포인터 산술 연산은 포인터의 유연성을 활용하여 데이터 구조를 다루거나 메모리 관리 등의 작업을 수행할 때 유용합니다. 주의할 점은 올바르지 않은 주소에 접근하지 않도록 주의해야 하며, 포인터 산술 연산을 적절하게 사용하여 안정성을 유지해야 합니다.
 

 

'IT > c언어' 카테고리의 다른 글

C 언어 포인터 배열  (0) 2023.07.12
C 언어 포인터 상수  (0) 2023.07.12
C 언어 포인터와 배열의 관계  (0) 2023.07.12
C 언어 포인터(Pointers)  (0) 2023.07.12
C 언어 널 문자 (Null Character)  (0) 2023.07.12

댓글