C언어 포인터의 이해 1편
포인터는 C언어를 배우는 사람에게는 종종 어려움을 주는 주제 중 하나이다. 복잡해 보이지만 한 번 이해하면 강력한 도구가 될 수 있다. 이 포스팅에서는 포인터의 기본 개념을 쉽게 풀어 설명하고, 몇 가지 팁과 함께 실제 코드 예시를 통해 그 사용법을 알아보겠다.
⭐1. 포인터란 무엇인가?
포인터는 간단히 말해, 메모리 주소를 저장하는 변수이다. 즉, 포인터를 통해 다른 변수의 위치를 알고, 그 위치에 접근하여 값을 읽거나 변경할 수 있다. C언어에서 포인터는 데이터의 동적 관리와 복잡한 데이터 구조의 구현에 필수적인 요소이다.
⭐2. 포인터의 선언
포인터를 선언하는 방법은 다음과 같다.
타입 *포인터변수명;
예를 들어, int형 데이터를 가리키는 포인터를 선언하고 싶다면 다음과 같다.
int *ptr;
이 코드는 ptr이라는 이름의 포인터 변수를 선언한 것으로, int형 변수의 주소를 저장할 수 있음을 의미한다.
하지만 이와 같이 변수에 *을 붙이는 것은 포인터의 이해에 혼란을 가중시킨다.
실제로, 포인터도 변수이며, *는 그 변수가 포인터임을 나타내는 표시이다. 주소를 저장하는 변수이므로 아래와 같이 사용하는 것을 추천한다.
int* ptr;
⭐3. 포인터의 기본 사용
포인터를 사용하기 위해선 먼저 포인터에 주소를 할당해야 한다. 이는 & 연산자를 사용해 변수의 주소를 얻어, 포인터에 할당하는 방식으로 이루어진다.
int var = 10;
int* ptr = &var;
이제 ptr은 var의 메모리 주소를 가리키게 된다. var의 값을 포인터를 통해 접근하려면, 역참조 연산자 *를 사용한다.
printf("%d", *ptr); // 10 출력
아래 사진과 같이 이해하면 편한 것 같다.
사용자가 어디를 가리킬지 결정하는 행위 = 포인터를 선언(참조)
사용자가 가리키는 곳을 실제 레이저를 쏴서 가리키는 행위 = 해당 주소에 저장된 변수에 값을 가져오는 것(역참조)
'C언어 30강' 카테고리의 다른 글
[C/C++ Tip] 13. MCU 제어를 위한 비트 연산 (0) | 2024.10.29 |
---|---|
[C/C++ Tip] 12. 포인터가 헷갈릴 수 밖에 없는 이유: 별(*)의 종류와 정체 (1) | 2024.09.21 |
[C/C++ Tip] 10. Call by Value vs Call by Reference (0) | 2024.09.14 |
[C/C++ Tip] 9. memset, memcpy (0) | 2024.09.08 |
[C/C++ Tip] 8. 배열과 포인터 (0) | 2024.09.07 |