포인터의 메모리 주소를 저장하고 싶을 때 **
을 두 번 사용하면 포인터의 포인터(이중 포인터)를 선언할 수 있다.
포인터도 실제로는 변수이기 때문에 메모리 주소를 구할 수 있다. 하지만 포인터의 메모리 주소는 일반 포인터에 저장할 수 없고, int **numPtr2;
처럼 이중 포인터에 저장해야 한다.
#include <stdio.h>
int main()
{
int *numPtr1; // 단일 포인터 선언
int **numPtr2; // 이중 포인터 선언
int num1 = 10;
numPtr1 = &num1; // num1의 주소값 저장
numPtr2 = &numPtr1; // numPtr1의 주소값 저장
printf("%d\n", **numPtr2); // 20: 포인터를 두 번 역참조하여 num1의 메모리 주소에 접근 -> 10 출력됨
printf("%d\n", *numPtr2); // num1의 주소 출력됨
return 0;
}
#include <stdio.h>
int main() {
int a = 3;
int* x = &a; // a의 주소값 0x7
int** y = &x; // x의 주소값 0x8
// a의 값 = 3
printf("a의 value = %d\n", a);
// x의 값 = &a = 0x7
printf("x의 value = %p\n", x);
// a의 값 = 3
printf("a의 value = %d\n", *x);
// y = &x, *y = &a, **y = 3
printf("a의 value = %d\n", **y);
// y의 값(x의 주소값)의 값 = &a = 0x7
printf("x의 value = a의 주소값(&a) = %p\n", *y);
// y의 값 = &x = 0x8
printf("y의 value = x의 주소값(&x) = %p\n", y);
return 0;
}