본문 바로가기
프로그래밍언어/C 언어

[혼자 공부하는 C언어] 이중 포인터 개념

by khsnote22 2022. 12. 13.

http://www.yes24.com/Product/Goods/74269921

 

혼자 공부하는 C 언어 - YES24

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학

www.yes24.com

#include <stdio.h>

int main()
{
    int a = 10;
    int *pi;
    int **ppi;
    
    pi = &a;
    ppi = &pi; // 포인터의 주소를 저장한 이중 포인터
}

첫 번째 별은 ppi가 가리키는 자료형이 포인터임을 뜻하며 두 번째 별은 ppi 자신이 포인터임을 뜻합니다.

이중 포인터를 선언하여 메모리에 저장 공간이 할당되면 그 이후에 이중 포인터를 사용할 때는 변수명을 씁니다.

- 포인터를 변수명으로 쓰면 그 안의 값이 됩니다.

- 포인터에 & 연산을 하면 포인터 변수의 주소가 됩니다.

- 포인터의 * 연산은 화살표를 따라갑니다.

 

결국 이중 포인터 ppi로 변수 a 값을 사용하려면 간접 참조 연산자를 두 번 써야 합니다. ppi로 변수 a 값을 사용하려면 간접 참조 연산자를 두 번 써야 합니다. ppi가 가리키는 것은 포인터 pi 이므로  ppi에 간접 참조 연산을 수행하면  pi가 됩니다. 따라서 포인터 pi가 가리키는 변수 a 값을 쓰려면 간접 참조 연산자를 한 번 더 사용해야 합니다.

포인터는 변수이므로 주소 연산자를 사용하여 그 주소를 구할 수 있지만 상수인 주 소에는 주소 연산자를 쓸 수 없습니다. 


주소와 포인터의 차이
int a;
int *pi = &a; // 주소를 포인터에 저장
&pi; // 포인터에 주소 연산자 사용 가능
&(&a); // a의 주소에 다시 주소 연산자 사용 불가능

다중 포인터

이중 포인터도 변수이므로 주소 연산자를 사용하면 그 주소를 구할 수 있습니다. 만약 이중 포인터가 가리키는 자료형이 double 포인터일 때 이중 포인터를 가리키는 3중 포인터는 다음과 같이 선언합니다.

double ***ppp;