본문 바로가기
C언어/C 언어 중급

중급1강_C언어 포인터(Pointer) 완전 정복! 메모리 주소와 참조를 한 번에 이해하자

by AI쌤 2025. 4. 20.
반응형

✅ C언어 포인터(Pointer) 완전 정복! 메모리 주소와 참조를 한 번에 이해하자

C언어에서 가장 강력하면서도 어려운 개념 중 하나인 포인터(Pointer).
포인터를 이해하면 함수, 배열, 구조체, 동적 메모리 할당까지 훨씬 수월해집니다.

이번 강의에서는 포인터의 개념, 선언 및 사용법, 주소 연산자와 참조 연산자까지 C언어 포인터의 기초를 쉽고 명확하게 배워봅니다.


📌 포인터(Pointer)란?

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

일반 변수는 **값(value)**을 저장하지만,
포인터는 **그 값이 저장된 주소(address)**를 저장합니다.


🧠 왜 포인터를 배워야 할까?

  • 메모리 제어 가능
  • 배열/문자열과 밀접한 관계
  • 함수에서 변수값을 직접 수정 (Call by Reference)
  • 동적 메모리 할당 필수 개념

🛠 포인터 선언 방법

int *ptr;

✅ ptr은 int형 데이터를 가리키는 포인터
✅ *는 “포인터 변수”임을 나타냄


📍 주소 연산자 & 사용법

변수의 메모리 주소를 얻을 때 사용합니다.

int a = 10;
printf("%p\n", &a);    // a의 주소 출력

📥 포인터에 주소 저장하기

int a = 10;
int *p; p = &a;

✅ p는 a의 주소를 저장 → p는 a를 가리킨다


📤 참조 연산자 * 사용법

포인터가 가리키는 주소에 저장된 실제 값을 사용하거나 변경할 때 사용합니다.

printf("%d\n", *p); // a의 값인 10 출력 *p = 20; // a의 값이 20으로 변경됨

🔍 예제 코드: 포인터의 기본 사용

#include <stdio.h>
int main()
{
int a = 10;
int *p = &a;
printf("a의 값: %d\n", a);
printf("a의 주소: %p\n", &a);
printf("p가 가리키는 값: %d\n", *p);
*p = 30;
printf("변경된 a의 값: %d\n", a);
return 0;
}

❗ 포인터 사용 시 주의할 점

  • 포인터 초기화하지 않고 사용하면 쓰레기값 참조
  • NULL 포인터(int *p = NULL;)를 활용해 초기화 습관
  • 잘못된 주소를 참조하면 프로그램이 크래시

🎯 실습 과제

  1. 두 변수의 값을 포인터를 이용해 서로 바꾸기 (swap 함수)
  2. 정수 배열을 선언하고 포인터로 순회하며 출력
  3. 포인터를 사용하여 사용자 입력값 2배로 만들기

📘 주요 키워드 정리

키워드설명
* 포인터 선언 및 참조 연산자
& 주소 연산자
NULL 포인터 초기화용 값
int *ptr int형 포인터 선언

🗣 다음 주 예고: 포인터와 배열의 관계, 그리고 문자열

포인터를 제대로 이해하려면 배열과의 관계도 필수!
다음 주에는 포인터로 배열을 다루는 법,
그리고 문자열(char 배열)을 포인터로 접근하는 법을 배워봅니다.

반응형