포인터의 필요성
이전에 배열을 배우면서 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 |