코딩 학습/C와 C++

C - 포인터

이개 2026. 3. 3. 21:19

포인터의 필요성

이전에 배열을 배우면서 5천만개 크기의 배열을 생각해봤습니다. int 자료형의 크기는 4byte이므로, 5천만개 배열의 크기는 2억바이트입니다. 이걸 어딜가나 들고다니기엔 무리입니다. 배열은 연속적인 메모리에 저장된다고 했으니까 자료형과 시작 주소만 알면 될 것 같습니다. 시작 메모리 주소로 가서 자료형을 통해 얻은 한 칸의 크기로 모두 접근 가능하기 때문입니다.

 

포인터(Pointer) [중요 샘플 코드]

메모리 주소를 저장하기 위한 변수.

자료형 변수명 = 값;

자료형* 변수명 = 메모리주소값; // 자료형쪽에 Asterisk를 붙힙시다.
    // 변수명쪽에 Asterisk를 붙히면 뒤에서 배울 역참조 연산자와 심히 헷갈립니다.

 

[심화] 포인터를 공부하다보면.

단순히 “자료형* 변수명”으로 적혀있지 않은 경우가 종종 있습니다. ex. const int*, int* const Add(), int* Ptrs[3], … 이런 경우에도 흔들리지 않는 방법이 있습니다.

1️⃣변수명을 기준으로 일단 오른쪽(right)으로 읽어갑니다.

  • Var is ~

2️⃣더이상 읽을게 없거나, 읽어 가는 방향 기준으로 닫는 괄호가 나온다면 반대쪽(left)으로 읽습니다.

3️⃣아래 기호들을 만날 때마다 다음과 같이 해석. (관사는 일단 생략)

  • *: Var is pointer to ~ []: Var is array of ~
  • (): Var is function expecting ~ and returning ~

 

 

[심화] Right-Left Rule

// Main.c

#include <stdio.h>

int Func(int A, int B); // 1번

int* (*WTF)(void); // 2번

int main(void)
{
	int* Var[3]; // 3번

	return 0;
}

 

 

2번의 변수명 없는 함수가 잘 이해가 안 되어서 설명을 좀 더 찾아보았다. 자바에서 인터페이스와 비슷한 느낌인 것 같다.

1️⃣ 변수명 없는 함수 선언이 필요한 경우

🔹 1) 헤더 파일에서 함수 시그니처만 알려주고 싶을 때

  • .h 헤더 파일에서는 함수의 타입 정보만 전달하면 됨
  • 변수명 없이도 OK, 호출하는 쪽에서는 타입만 알면 됨
// header.h
int Add(int, int); // 변수명 없음

🔹 2) 함수 포인터 타입 선언할 때

  • 포인터만 필요하고, 변수명은 불필요
int (*funcPtr)(int, int); // 포인터 타입 선언
  • 호출할 때는 실제 함수가 정의되어 있으면 됨
  • 변수명 없이 “타입”만 알려주는 느낌

'코딩 학습 > C와 C++' 카테고리의 다른 글

C++ 기초 - 포인터와 레퍼런스  (0) 2026.03.05
C++ 기초 - Visual Studio 실행, 변수, 입출력  (0) 2026.03.04
C - 배열  (0) 2026.03.04
C 언어 연습  (0) 2026.03.03
C - 동적 할당, 구조체  (0) 2026.03.03