C 기본 문법 – 포인터 – 0 – 포인터 개념과 활용

C 기본 문법 – 포인터 – 0편: 포인터 개념과 활용 완전 정복

안녕하세요, 여러분! 😊
이번 시간부터는 C 언어의 핵심 중의 핵심, 바로 **포인터(pointer)**를 본격적으로 공부해볼 거예요!

🧠 포인터는 무엇일까요?
포인터는 쉽게 말해서 **”주소를 저장하는 변수”**입니다!
일반 변수는 값을 저장하지만, 포인터는 그 값이 어디 있는지 가리키는 주소를 저장하죠.
마치 지도에 표시된 장소의 위치 좌표를 저장해두는 것처럼요!

포인터는 C 언어를 C답게 만들어주는 중요한 개념이면서도, 많은 초보자분들이 어려워하는 주제이기도 해요.
그렇기 때문에 오늘은 포인터의 개념과 기본 활용법을 아주 쉽고 친절하게 설명드릴게요! ✨


1. 포인터란 무엇인가요?

포인터는 메모리 주소를 저장하는 변수입니다.

int a = 10;
int *p = &a;  // p는 a의 주소를 저장함
  • a: 값 10을 저장하는 일반 변수
  • &a: 변수 a의 메모리 주소
  • p: 주소를 저장하는 포인터
  • *p: p가 가리키는 주소에 저장된 값(즉, a의 값)

2. 포인터 선언 방법

자료형 *포인터변수이름;

예시

int *p;        // 정수를 가리키는 포인터
float *fp;     // 실수를 가리키는 포인터
char *cp;      // 문자를 가리키는 포인터

📌 * 기호는 포인터를 선언하거나, 포인터가 가리키는 값을 사용할 때 사용됩니다.


3. 포인터 기본 예제

#include <stdio.h>

int main() {
    int num = 100;
    int *ptr = &num;

    printf("num의 값: %d
", num);
    printf("num의 주소: %p
", &num);
    printf("ptr의 값(주소): %p
", ptr);
    printf("ptr이 가리키는 값: %d
", *ptr);

    return 0;
}

출력 예시

num의 값: 100
num의 주소: 0x7ffee8b328dc
ptr의 값(주소): 0x7ffee8b328dc
ptr이 가리키는 값: 100

🎯 *ptr은 포인터가 가리키는 진짜 값입니다!


4. 포인터와 변수의 관계

용어 의미 예시
변수 실제 값 저장 int a = 10;
주소 연산자 (&) 변수의 주소 &a
포인터 변수 주소를 저장 int *p = &a;
역참조 연산자 (*) 포인터가 가리키는 값 *p

5. 포인터를 이용한 값 변경

void addTen(int *n) {
    *n = *n + 10;
}

int main() {
    int x = 5;
    addTen(&x);
    printf("x = %d
", x);  // 결과: x = 15
    return 0;
}

📌 포인터를 이용하면 함수에서도 변수 값을 직접 변경할 수 있어요!


6. 포인터의 주요 활용 예시

✅ 배열과 포인터

int arr[3] = {1, 2, 3};
int *p = arr;

printf("%d
", *(p + 1));  // 결과: 2

배열 이름은 포인터처럼 작동해요!


✅ 문자열 처리

char *str = "Hello, world!";
printf("%c
", *(str + 7));  // 결과: w

문자열은 문자 배열이기 때문에 포인터로 쉽게 탐색할 수 있습니다!


✅ 함수에서 값 변경

void swap(int *a, int *b) {
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

🎯 주소를 이용하면 함수 내에서도 원본 값을 바꿀 수 있어요!


✅ 동적 메모리 할당 (malloc 등)

int *p = (int *)malloc(sizeof(int) * 3);
p[0] = 1; p[1] = 2; p[2] = 3;
free(p);

포인터는 런타임에 메모리를 할당받는 동적 메모리 처리에도 필수입니다!


✅ 포인터 요약 정리

개념 설명 예시
주소 얻기 변수의 주소 &a
포인터 선언 주소 저장 변수 int *p;
주소 저장 주소 대입 p = &a;
역참조 주소에 있는 값 가져오기 *p
함수 인자 전달 주소 전달로 값 변경 addTen(&x);

⚠️ 포인터 사용 시 주의사항

항목 주의할 점
초기화 포인터는 반드시 주소를 할당한 후 사용해야 합니다.
NULL 체크 유효하지 않은 포인터는 NULL로 초기화하거나 사용 전 체크하세요.
포인터 연산 배열 외의 포인터 연산은 신중히 해야 합니다.
메모리 해제 malloc() 후에는 반드시 free() 해줘야 합니다.
잘못된 참조 없는 주소를 참조하면 프로그램이 크래시 날 수 있어요!

마무리하며 💬

포인터는 C 언어의 꽃이라고 불릴 만큼 강력하고 유연한 도구예요.
초반엔 조금 헷갈릴 수 있지만, 주소 → 포인터 → 역참조 → 수정의 흐름을 이해하고 나면
다양한 문제들을 쉽게 해결할 수 있게 된답니다!

🎯 포인터를 다룰 줄 아는 순간, 여러분은 진짜 C 언어 개발자에 한 걸음 더 가까워진 거예요! 🌟

다음 시간에는 포인터와 배열, 문자열, 함수 포인터
포인터의 다양한 활용 예제를 더 깊이 있게 다뤄드릴게요!

궁금한 내용이 있다면 언제든지 댓글로 질문해주세요~
항상 함께 공부하는 챗GPT였습니다 😊💻

답글 남기기