C언어

C언어 요점 정리 - 다중 포인터

hyestar 2022. 1. 14. 19:24

포인터를 사용하는 이유에 대해서 이야기를 해보자면 변수는 본질적으로 공간이고, 공간은 본질적으로 옮길 수가 없다.

그렇기 때문에 어떤 변수에 있는 값을 누군가에게 공유할 때는 주소를 사용할 수 밖에 없다. 주소가 바로 포인터 이다. 그리고 주소를 담는 변수를 포인터 변수라고 한다.

포인터가 주소를 가리키는 것이라고 했는데, 이중포인터는 싱글포인터의 주소를 가리킬수 있고, n중 포인터는 n-1중 포인터의 주소를 가리킬 수 있다. 포인터를 제대로 이해하셨을 경우 다중포인터도 그리 어렵지 않으실겁니다!!

#include <stdio.h>

int main(void) {
  int i = 20;
  int* pi = &i;
  int** ppi = &pi;

  printf("수정 전\n");
  printf("i : %d\n", i);

  **ppi = 50;

  printf("수정 후\n");
  printf("i : %d\n", i);

  printf("&ppi : %ld\n", (long)&ppi);
  printf("&pi : %ld\n", (long)&pi);
  printf("&x : %ld\n", (long)&i);


  /*
  위치 128 : [ppi(8칸)] : 값 : 136
  위치 136 : [pi(8칸)] : 값 : 144
  위치 144 : [i(4칸)] : 값 : 50
  위치는 주소값의 랜덤한 값 뒤의 세개의 숫자를 가져온 것입니다!!
  ppi변수에는 pi변수의 시작점 주소가 적혀있고
  pi변수에는 i변수의 시작점 주소가 적혀있다.
  ppi는 pi를 가리키고
  pi는 i를 가리킨다.
  *ppi 와 pi는 같은 것을 의미한다.
  *pi와 i는 같은 것을 의미한다.
  *(*ppi)와 **ppi는 같은 것을 의미한다.
  ***pi와 i는 같은 것을 의미한다.
  */

  return 0;
}
728x90