티스토리 뷰
🧭 포인터 증감 연산 완전정복: 배열 위를 걷는 화살표
C언어를 배우다 보면 가장 많이 하는 질문 중 하나가 있습니다.
“왜 p++을 하면 값이 커지는 게 아니라 다음 데이터를 가리키는 것인가요?”
이 글에서는 그 질문에 답하기 위해 포인터가 무엇인지, 증감 연산이 어떻게 동작하는지, 메모리에서의 움직임을 직관적으로 이해할 수 있도록 풀어 설명합니다. 중간중간 표와 다이어그램으로 현재 상태를 시각화하되, 본문 설명이 중심이 되도록 구성했습니다.
📌 포인터란?
포인터는 값이 아닌, 값이 저장된 메모리의 주소를 저장하는 변수입니다.
예를 들어 int x = 42;일 때, &x는 x가 저장된 메모리의 주소입니다.
이 주소를 담는 변수가 포인터이며, int* p = &x;라고 선언합니다.
p는 x의 위치를 가리키며, *p라고 하면 x의 값을 가져올 수 있습니다.
| x:42 | …메모리… | ^ p
위와 같이 p는 x가 저장된 메모리 칸을 가리키고 있습니다.
🧭 포인터의 증감 연산
포인터는 ++ 또는 -- 연산을 통해 배열의 다음 또는 이전 요소로 이동할 수 있습니다.
여기서 중요한 점은 포인터가 단순히 숫자 1을 더하거나 빼는 것이 아니라, 데이터 타입 크기만큼 주소를 이동한다는 것입니다.
예를 들어 char*는 한 칸에 1바이트이므로 주소가 1씩 증가하지만, int*는 한 칸에 4바이트이므로 주소가 4씩 증가합니다.
데이터 타입의 크기를 자동으로 고려해 주소를 옮겨가기 때문에 배열의 타입에 맞게 포인터가 정확히 다음 요소를 가리키게 됩니다.
📋 배열과 포인터
배열은 메모리상에 연속된 공간에 데이터가 저장됩니다.
포인터는 배열의 첫 번째 요소를 가리키며 시작하고, 증감 연산을 통해 순서대로 요소를 탐색할 수 있습니다.
예를 들어 문자열 "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++는 데이터 타입 크기만큼 메모리 주소를 이동합니다. - ✅ 배열과 문자열을 탐색할 때 유용합니다.
- ✅ 배열의 크기와 끝을 반드시 확인하며 사용합니다.
'C언어' 카테고리의 다른 글
| C언어에서 문자열 포인터와 서식문자(%c, %s) (0) | 2025.07.15 |
|---|---|
| C언어 구조체 포인터의 점(.)과 화살표(->) 차이 설명 (0) | 2025.07.15 |
| C언어 printf 소수점 출력 완전 정리 (0) | 2025.07.13 |
| 비트연산자 << 와 >> 총정리 (0) | 2025.07.10 |
| C언어 2차원 배열과 포인터 정리 (0) | 2025.07.07 |
- Total
- Today
- Yesterday
- dfs
- 객체지향
- 알고리즘
- 코딩
- 백준
- Python
- python 알고리즘
- 상속
- C++
- 그리디
- 브루트포스
- 알고리즘기초
- 파이썬코딩
- 프로그래머스
- 그리디알고리즘
- DP
- c언어
- 동적 계획법
- 프로그래밍
- 코딩 테스트
- 알고리즘 문제풀이
- 문자열처리
- HTML
- 그래프 탐색
- 알고리즘문제풀이
- 파이썬
- 동적계획법
- 문제 풀이
- 코딩테스트
- 문제풀이
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |