본문 바로가기
컴퓨터 공학/C, C++

[ C ] 포인터 이해하기10_다중, 이중 포인터란? / 다중 포인터 사용하는 이유

by hahehohoo 2020. 7. 21.
반응형

다중, 이중 포인터란? / 다중 포인터 사용하는 이유

 

■ 이중 포인터란?

 

포인터는 무엇인가요?

주소를 저장하는 변수입니다. 

그럼 그 번수의 주소를 또 저장할 수 있을까요?

 

10이라는 데이터가 저장되어 있다고 합시다.

저장된 곳의 주소가 있겠지요. 그 주소가 또 다른 곳에 저장되어 있다면요?

다음과 같은 그림이 그려지겠네요. 

 

 

 

 

주소를 저장한 변수의 주소는 어디에 저장할까요? 주소를 저장하니까 포인터네요. 

그럼 그 포인터의 데이터형은 뭔가요? 그 역시 어떤 것의 주소이므로 포인터입니다. 

이런 식으로 포인터 변수의 주소를 저장하는 변수를 이중 포인터라고 합니다. 

 

 

int num = 10;     // int형 변수 num 선언하고 10대입
int* p = #   // int형 포인터 p선언하고 num 주소값 대입
int** pp = &p;    // int형 포인터를 저장한는 포인터 pp선언하고 p의 주소값 대입 -> 이중포인터

 

이중포인터를 읽을 때는 오른쪽에서 왼쪽으로 읽으면 됩니다. 

영어로 '포인터 투 포인터 투 인트' 입니다. 

 

이중 포인터 그림으로 이해하기1

 

 

이중 포인터 그림으로 이해하기2

 

 

사물함 번호, 집 주소 - 메모리 주소

친구들 파티 - 실제 데이터

 

 

 

 

 


다중 포인터란? 활용도는?

 

이중 포인터는 주소의 주소입니다. 

그럼 주소의 주소의 주소도 가능할까요? 물론입니다. 

이렇게 작성하면 됩니다.

int*** r = &q;

 

14중도 가능합니다. 

int************** z = %y;

 

하지만 3중 포인터는 매~~~~우 가끔 쓰고, 4중 이상은 거의 안 쓰기 때문에 이중 포인터 개념을 제대로 익히면 됩니다.

 

 

이중 포인터는 어떻게 활용할 수 있을까요?

구구단, 2D 이미지 같은 2차원 자료를 처리할 때입니다. 

 

출처:https://tumblbug.com/dalguris/community/https://www.fmkorea.com/best/2891978086

 

 

2차원 배열은 이중 포인터와 비슷합니다. 

 

 

 

메인 함수의 argv라는 매개변수가 있습니다. 이 변수도 알고 보면 이중포인터입니다.

int main(int argc, char* argv[]);
int main(int argc, char** argv);

 

 

 3차원 공간을 다루는 곳에서는? 3차원 배열를 사용하겠지요. 따라서 삼중포인터도 가능합니다. 

 

출처: https://www.pinterest.co.kr/pin/381961612144745613/

 

더보기

보충내용

화살표 그리는 방식으로 한면 적용해서 문제 풀어봐라

 

 

 

 

강의 230번 후반: 코드 보기_스왑 함수 

 

강의 240: 코드 보기_단어 정렬

 

 

 

 

 

 

 

 

-----------------------------------

C언어 문법 총정리

목록 보러가기 

-----------------------------------

 

 

반응형


댓글