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

“들고 다닌다”의 의미
main() 함수에서 대선투표결과가 저장된 배열이 있다고 해봅시다. Count() 함수에서 개표해보고자 합니다. 즉, Count() 함수로 대선투표결과가 저장된 배열을 전달해야 합니다. 그럼 Count() 함수의 스택 프레임은 2억바이트를 할당해줘야 할까요? 들고다니기엔 무리입니다.
ex) 아파트 1채 10톤(2억 바이트) Vs. 아파트 1채의 소유문서 10g (시작 메모리 주소값. 8바이트)
실제 함수의 동작에서도 Count(int Votes[]) 함수를 호출하면 시작 메모리 주소 값이 인자값으로 전달되게 됩니다.
근데 지금까지 배운 개념 중에는 메모리 주소를 저장할 수 있는 자료형은 없었습니다. 메모리 주소를 저장할 수 있는 변수인 포인터에 대해 알아봅시다.
포인터(Pointer) [중요 샘플 코드]
메모리 주소를 저장하는 변수.
자료형 변수명 = 값;
자료형* 변수명 = 메모리주소값; // 자료형쪽에 Asterisk를 붙힙시다.
// 변수명쪽에 Asterisk를 붙히면 뒤에서 배울 역참조 연산자와 심히 헷갈립니다.
// Main.c
#include <stdio.h>
int main(void)
{
char* Name = "Vardy";
printf("%s", Name);
return 0;
}
포인터를 선언할 때 자료형은 왜 필요할까요?
해당 메모리 주소로 가서 얼마만큼의 크기로 읽어야 내 데이터인지 모르기 때문입니다. 자료형이 있어야 크기를 알 수 있습니다. 더 나아가서, 자료형 크기만큼 가면 다음 데이터를 얻을 수도 있습니다.
'C' 카테고리의 다른 글
| [내배캠자습]C언어 챕터 7-3 : NULL과 void 포인터 (0) | 2026.03.29 |
|---|---|
| [내배캠자습]C언어 챕터 7-2 : 주소 연산자와 역참조 연산자 (0) | 2026.03.29 |
| [내배캠자습]C언어 챕터 6-5 : 변수의 종류 (0) | 2026.03.29 |
| [내배캠자습]C언어 챕터 6-4 : 전방 선언 (0) | 2026.03.29 |
| [내배캠자습]C언어 챕터 6-3 : 스코프 (0) | 2026.03.29 |