본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #46 다중 포인터

안녕하세요. 오랜만에 C언어강좌를 다시 써보네요.

한 3~4달정도 블로그 포스팅을 쉰것같습니다.

오랜만에 써서 갑자기 강좌가 좀 다른느낌이 들수도 있습니다. 양해 부탁드려요 ㅋㅋ


예전 강좌까지는 이미지를 통해서 코드를 보여드렸었는데 굳이 그럴 필요 없었더라고요.

1
2
3
4
5
#include <stido.h>
 
int main(void) {
    printf("HelloWorld");
}

cs

앞으로는 이런 방식으로 예시를 보여드릴수 있겠습니다.

그리고 예전에는 1일에 한개씩 글을 썼지만 이제는 그렇게까지는 못쓸것같네요.

조금 불규칙적으로 글을 작성하게 될것같습니다. 그래도 시간날때마다 틈틈히 써보도록 할게요.



아무튼 여기까지는 잡소리였고 강좌 시작하겠습니다.

이번에 배워볼 내용은 다중 포인터라는 개념인데요. 말만 들어도 감이 오지않나요?

다중포인터라는것은 말 그대로 포인터가 여러개라고 받아 들이면 됩니다.



포인터 변수가 가리키는 대상이 또다른 포인터 변수일경우 포인터의 포인터가 됩니다.

이런 경우를 이중 포인터 라고 합니다.


int형 변수를 가리키는 포인터변수가 있다고 했을때 그 포인터변수를 가리키는 포인터 변수를 이중포인터라고 할수 있습니다.

근데 굳이 다중 포인터라는 말을 쓴 이유는 이중 포인터말고도 포인터가 3개,4개 중첩될수도 있기때문입니다.


1
2
3
4
5
#include <stdio.h>
 
int main(void) {
    int ** pp;
}
cs

이중포인터의 선언은 위와같이 할수 있습니다.
int형 포인터 변수를 가리킬수 있는 포인터변수 pp를 선언하는 코드입니다.



실제로 이중포인터를 이용해서 int형 변수를 가리키는 코드를 만들어봅시다.

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main(void) {
    int num = 5;
    int * pnum = &num;
    int ** ppnum = &pnum;
    
    printf("*ppnum : %d\n",*ppnum);
    printf("**ppnum : %d\n",**ppnum);
}
cs

int형 변수 num을 가리키는 포인터변수 pnum을 만들고 그 pnum변수를 가리키는 ppnum 이중 포인터 변수를 만들었습니다

또한 ppnum변수를 통해서 num에 접근하려면 *연산자를 두개 붙이면 됩니다.



출력결과입니다.

*ppnum의 출력 결과는 포인터변수 pnum이 가리키고있는 num의 주소값입니다.



1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main(void) {
    int num = 5;
    int * pnum = &num;
    int ** ppnum = &pnum;
    int *** pppnum = &ppnum;
    
    printf("*pppnum : %d\n",*pppnum);
    printf("**pppnum : %d\n",**pppnum);
    printf("***pppnum : %d\n",***pppnum);
}
cs


또한 이중포인터뿐만 아니라 삼중포인터도 가능합니다. (계단식코드 멋져)
포인터가 포인터를 가리키는식으로 포인터가 여러개 겹쳐있는것을 다중포인터라고 합니다.