본문 바로가기

Code/C/C++

포인터의 용도

컴퓨터 언어 중 특히 C언어를 배우면서 가장 힘든 부분이 포인터라고 생각된다.
구조체나 공용체라는 것도 동시에 등장하게 되는데,
자료구조와 병행하면서 겨우 이해할 수 있었던 부분이었다고 기억된다.

이제는 포인터를 써야할 때면 쓸 수 있게 되었지만,
그 당시는 왜 그 어려운 포인터를 써야만 하는지 이해할 수 없었다.
그 점에서 <Code Reading>에서의 정리는 매우 도움이 되었기에 예전에 정리했던 내용을 다시금 정리해 본다.

C 언어에서 포인터(pointer)가 쓰이는 방식은 주로
- 연결된(linked) 자료구조를 구축하기 위해
- 동적으로 할당된 자료구조를 지칭하기 위해
- 참조 전달 방식(call by reference)의 호출을 구현하기 위해
- 자료구조 안의 요소에 접근하고 요소들을 훑어 나갈 때
- 배열을 인수로 전달할 때
- 함수를 참조하기 위해
- 다른 값에 대한 하나의 별칭으로
- 문자열을 표현하기 위해
- 시스템 메모리에 직접 접근하기 위해


덧붙여 구조체(struct)의 용도로는
- 일반적으로 하나의 전체로 쓰이는 것이 자연스러운 자료 요소들을 한데 묶고자 할 때
- 하나의 함수로 하여금 여러 개의 자료 요소들을 돌려주도록 할 때
- 연결된 자료구조를 구축하려 할 때
- 하드웨어 장치나 네트웍 연결, 저장 매체에 있는 자료의 조직화 구조를 표현하려 할 때
- 추상 자료형을 구현하려 할 때
- 객체 지향적인 방식으로 프로그램을 만들 때


공용체(union)의 경우는
- 저장 효율성을 위해
- 다형성을 구현하기 위해
- 서로 다른 내부 표현을 이용해서 자료에 접근하기 위해


발췌 : Code Reading - 오픈소스 관점에서 본 코드 읽기, Scott Meyers, 정보문화사