본문 바로가기
c언어

c언어 포인터 사용의 장점에 대하여 알아보기

by 개발자 L 2022. 12. 10.
반응형

c언어 포인터 사용의 장점에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 포인터를 사용하는 것에 대한 장점에 대해 알아보려고 합니다.

코딩 관련 수업이나 영상 등을 보게 되면 포인터를 사용을 하는 게 정말 중요하다고 말을 많이 하곤 하죠.

하지만 언뜻 보기에는 쓰기도 어려운 것 같고, 포인터를 써서 작성한 코드들을 보게 되면

마치 통곡의 벽이 하나 서있는 것 같은 느낌을 받을 때가 있지요.

그래서 이러한 포인터를 쓰면 뭐가 좋은 지, 왜 그렇게 쓰라 하는지에 대하여 알아보려 합니다.

그럼 지금부터 함께 보시죠.

 

1. 포인터를 사용하면 연결 리스트나 이진트리 등의 향상된 자료 구조를 만들 수 있다.

우리가 포인터를 사용하면 직접 변수를 전달하는 것이 아니라 주소를 전달함으로써 원본에 접근 가능하게 만들기 때문에

좀 더 복잡하고 고차원적인 자료 구조를 제작을 할 수 있습니다.

그중에 가장 대표적인 예로 연결 리스트가 있는데,

연결 리스트는 포인터를 이용을 하여 메모리 내에 흩어져 있는 데이터들을 연결을 시키는 자료 구조입니다.

그리고 이 연결을 하는 매개체로 포인터를 사용하기 때문에

주소로 하여금 마치 체인처럼 연결이 되어있는 구조를 연상할 수 있습니다.

그래서 그 연결되어 있는 포인터란 줄을 따라가면 데이터의 원본에 접근을 할 수 있게 되고,

여기저기 흩어져서 찾아내기 힘든 데이터들을 한 곳에다가 모아둘 수 있게 되는 것입니다.

 

2. 메모리 매핑 하드웨어를 조작할 수 있다.

하드웨어 역시 소프트웨어를 프로그래밍하여 isp를 이용해 코드를 저장시켜 구동을 시킨다는 것을 다들 알고 있을 겁니다.

그중에서도 특히 아두이노 같은 엠베디드 시스템에서는 흔히 포인터를 이용해서

메모리 매핑 하드웨어를 직접 조작합니다.

여기서 메모리 매핑 하드웨어란 메모리처럼 접근 가능한 하드웨어 장치를 말합니다.

예를 하나 들어보자면, 우리가 흔히 쓰는 스마트폰이 있죠?

이 스마트폰에 탑재가 되어있는 GPS 장치에 접근을 한다고 가정을 해봅시다.

그럴 경우에 포인터를 이용하여 주소를 전달해 GPS 장치로 접근하게 만드는 것이죠.

그러면 간단한 하나의 예시를 보여드리겠습니다.

int *GPS_address = (int *)0x7fff; // 0x7fff로 기기 초기화
*GPS_address = 0x0001; 초기화된 기기에 0x0001 값 사용

이렇게 한 번 작성을 해봤습니다.

이러한 방법을 절대 참조라고 하는데, 이 방법은 하드웨어, 특히 엠베디드 시스템에서 흔히 씁니다.

단순 소프트웨어 프로그래밍에서는 이럴 경우 최악의 수는 모든 데이터가 날아가는 현상이 일어나기 때문에

절대로 쓰지 않습니다.

하지만 하드웨어에 관심이 있으신 분이라면 알아두면 좋은 방법이겠죠?

이 방법을 이용해서 하드웨어 기기 내 엠베디드 시스템에 접근을 하니까요.

반응형

 

3. 참조에 의한 호출(call - by - reference)을 할 수 있게 된다.

c언어에서는 기본적으로 값에 의한 호출(call - by - value)을 제공을 합니다.

하지만 우리가 포인터를 쓰게 되면 참조에 의한 호출을 할 수 있게 됩니다.

다시 말하면 값을 복사를 해서 복사본을 주는 것이 아니라,

주소를 이용하여 값의 원본에 직접 접근해 조작을 가능하도록 만들어 준다는 의미입니다.

그리고 나중에 배울 이중 포인터라는 것이 있는데,

이를 이용해서 하나 이상의 값을 반환을 해야 하는 상황에도 쓸 수 있기 때문에 포인터는 꼭 필요합니다.

 

4. 동적 메모리 할당이 가능해진다.

이 역시도 나중에 말씀을 드릴 건데, 동적 메모리 할당이란 프로그램을 실행하는 도중에 운영 체제로부터

메모리를 실시간으로 할당을 받게 하는 하나의 프로그램 기법입니다.

그리고 이는 포인터의 존재 하에 이용이 자유롭기 때문에 절대로 포인터를 이용해야 하는 기법입니다.

 

여기까지 포인터를 사용하는 것에 대한 장점을 알아보았는데요,

다음 포스팅에서는 포인터를 이용하여 여러 가지 문제들을 풀어보는 시간을 가져보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글