C언어 포인터

기술노트

📜 C언어 포인터

C언어 포인터는 메모리 주소를 저장하는 변수입니다. 일반 변수가 값을 저장하는 반면, 포인터 변수는 메모리 상의 특정 위치(주소)를 가리키는 역할을 합니다. 이를 통해 메모리에 직접 접근하여 데이터를 효율적으로 조작하거나, 복잡한 자료구조를 구현할 수 있습니다.


🤔 포인터는 왜 필요한가?

  • 메모리 직접 접근 : 포인터를 통해 메모리의 특정 위치에 직접 접근하여 데이터를 읽거나 쓸 수 있습니다. 이는 하드웨어 제어나 운영체제 개발 등 저수준 프로그래밍에 필수적입니다.
  • 효율적인 데이터 처리 : 함수에 큰 데이터를 전달할 때, 데이터를 통째로 복사하는 대신 데이터의 주소(포인터)만 전달하여 메모리 사용량과 처리 시간을 줄일 수 있습니다.
  • 동적 메모리 할당 : 프로그램 실행 중에 필요한 만큼 메모리를 할당받고 해제할 수 있도록 `malloc()`, `free()`와 같은 함수와 함께 사용됩니다.
  • 복잡한 자료구조 구현 : 연결 리스트, 트리, 그래프 등 동적으로 크기가 변하는 복잡한 자료구조를 구현하는 데 필수적입니다.

⚙️ 포인터의 기본 문법

  • 포인터 변수 선언 : `데이터타입 *변수명;` (예: `int *ptr;`)
  • 주소 연산자 (`&`) : 변수의 메모리 주소를 얻습니다. (예: `ptr = #`)
  • 역참조 연산자 (`*`) : 포인터가 가리키는 메모리 주소에 저장된 값을 가져옵니다. (예: `*ptr = 10;`)

```c

  1. include <stdio.h>

int main() {

   int num = 10; // 일반 변수 선언
   int *ptr;     // 포인터 변수 선언
   ptr = #   // ptr에 num의 주소를 저장
   printf("num의 값: %d\n", num);     // 10
   printf("ptr이 가리키는 값: %d\n", *ptr); // 10
   printf("num의 주소: %p\n", &num);   // num의 메모리 주소
   printf("ptr의 값 (주소): %p\n", ptr); // num의 메모리 주소
   *ptr = 20;    // ptr이 가리키는 곳의 값을 20으로 변경
   printf("변경된 num의 값: %d\n", num); // 20
   return 0;

} ```


💡 정보처리기사 핵심 Point

  • C언어에서 포인터는 메모리를 직접 제어하는 강력한 도구이지만, 잘못 사용하면 메모리 누수(Memory Leak)세그먼트 오류(Segmentation Fault)와 같은 심각한 버그를 유발할 수 있습니다.
  • 정보처리기사 시험에서는 포인터의 개념, 선언, 주소 연산자(`&`), 역참조 연산자(`*`)의 사용법을 묻는 문제가 자주 출제됩니다.
  • 배열과 포인터의 관계, 함수에 인자를 포인터로 전달하는 방식(Call by Reference) 등을 이해하는 것이 중요합니다.

```