티스토리 뷰

C언어

포인터 증감 연산 완전정복

박완희버서커 2025. 7. 7. 17:04
반응형
🧭 포인터 증감 연산 완전정복: 배열 위를 걷는 화살표

🧭 포인터 증감 연산 완전정복: 배열 위를 걷는 화살표

C언어를 배우다 보면 가장 많이 하는 질문 중 하나가 있습니다.

“왜 p++을 하면 값이 커지는 게 아니라 다음 데이터를 가리키는 것인가요?”

이 글에서는 그 질문에 답하기 위해 포인터가 무엇인지, 증감 연산이 어떻게 동작하는지, 메모리에서의 움직임을 직관적으로 이해할 수 있도록 풀어 설명합니다. 중간중간 표와 다이어그램으로 현재 상태를 시각화하되, 본문 설명이 중심이 되도록 구성했습니다.



📌 포인터란?

포인터는 값이 아닌, 값이 저장된 메모리의 주소를 저장하는 변수입니다.
예를 들어 int x = 42;일 때, &xx가 저장된 메모리의 주소입니다.
이 주소를 담는 변수가 포인터이며, int* p = &x;라고 선언합니다.
px의 위치를 가리키며, *p라고 하면 x의 값을 가져올 수 있습니다.

| x:42 |   …메모리…   |
  ^
  p

위와 같이 px가 저장된 메모리 칸을 가리키고 있습니다.



🧭 포인터의 증감 연산

포인터는 ++ 또는 -- 연산을 통해 배열의 다음 또는 이전 요소로 이동할 수 있습니다.
여기서 중요한 점은 포인터가 단순히 숫자 1을 더하거나 빼는 것이 아니라, 데이터 타입 크기만큼 주소를 이동한다는 것입니다.
예를 들어 char*는 한 칸에 1바이트이므로 주소가 1씩 증가하지만, int*는 한 칸에 4바이트이므로 주소가 4씩 증가합니다.

데이터 타입 크기(byte) p++ 시 주소 증가량
char* 1 +1
int* 4 +4
double* 8 +8

데이터 타입의 크기를 자동으로 고려해 주소를 옮겨가기 때문에 배열의 타입에 맞게 포인터가 정확히 다음 요소를 가리키게 됩니다.



📋 배열과 포인터

배열은 메모리상에 연속된 공간에 데이터가 저장됩니다.
포인터는 배열의 첫 번째 요소를 가리키며 시작하고, 증감 연산을 통해 순서대로 요소를 탐색할 수 있습니다.
예를 들어 문자열 "ABC"를 담은 배열을 포인터가 순회하는 모습을 보겠습니다.

🖋 코드 예제


char str[] = "ABC";
char* p = str;

포인터 p는 배열의 첫 번째 요소를 가리킵니다.
p++를 실행할 때마다 메모리상에서 한 칸 오른쪽으로 이동합니다.

| 'A' | 'B' | 'C' | '\0' |
   ^
   p

포인터가 배열의 첫 글자인 'A'를 가리키는 상태입니다.

| 'A' | 'B' | 'C' | '\0' |
         ^
         p

p++ 후에는 두 번째 글자인 'B'를 가리킵니다.

| 'A' | 'B' | 'C' | '\0' |
             ^
             p

다시 p++ 하면 세 번째 글자인 'C'를 가리킵니다.

| 'A' | 'B' | 'C' | '\0' |
                   ^
                   p

마지막으로 '\0'(문자열의 끝)를 가리키면 반복문이 종료됩니다.



🧑‍💻 예제 코드와 결과

포인터 증감 연산으로 배열을 순회하며 문자를 출력하는 예제입니다.


#include <stdio.h>

int main() {
    char str[] = "ABC";
    char* p = str;

    while (*p != '\0') {
        putchar(*p);
        p++;
    }
    return 0;
}

위 코드에서 p++는 포인터가 배열의 다음 글자를 가리키게 해주며, *p는 현재 글자를 출력합니다.

ABC

이처럼 포인터 증감 연산은 배열을 인덱스 없이도 효율적으로 탐색할 수 있게 해줍니다.



🪧 요약

  • ✅ 포인터는 메모리 주소를 저장합니다.
  • p++는 데이터 타입 크기만큼 메모리 주소를 이동합니다.
  • ✅ 배열과 문자열을 탐색할 때 유용합니다.
  • ✅ 배열의 크기와 끝을 반드시 확인하며 사용합니다.


반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함
반응형