C&C++_Basic/C_Pointer
# C언어 포인터 : 이중 포인터 기초 1
mrawesome
2020. 1. 14. 17:29
#include<stdio.h>
int main()
{
int i =20;
int *pi = &i;
int **dpi = π
/*
int *pi = &i; 는 다음과 같이 표현할 수도 있다.
>>
int *pi;
pi = &i;
즉, 다시 말해서, pi 는 i 의 주소값을 가리키는 포인터이다.
그러므로 출력시 *pi = i , 즉, i 의 상수값이 출력된다.
이번에는 int **dpi 를 살펴보자
int **dpi = π 도 다른 식으로 표현될 수 있다.
>>
int **dpi ;
dpi = π
이제 **dpi 즉, 이와 같이 **가 2개 붙으면, 이중 포인터라고 생각하면 된다.
이중 포인터 dpi 는 포인터 pi 의 주소값을 가리키는 것.
그러므로 *dpi 는, 포인터 pi 의 '값'을 가리킬 것인데, 여기서 pi 의 '값'이란 pi 이다. 즉, *dpi = pi 이다.
그런데, pi = &i, 즉, 포인터 pi 는 또다시, i의 주소값을 가리킨다.
결국 *dpi = pi = &i 라고 할 수 있다.
한번 더 나아가서
**dpi 는 pi에 *를 하나더 붙여서 *pi가 된다.
그리고 위에서 말했듯이 *pi = i 로, i의 '값'을 나타낸다.
따라서
**dpi = *pi = i 라고 표현할 수 있다.
*/
printf("%p %p %p\n",&i,pi,*dpi);
*pi = i+2 ;
// i = i+2 와 같은 코드이다. 왜냐하면 *pi = i 이기 때문에
// i + 2 = 22 가 되는데, 아래 보면 printf(" %p ") 를 적었다.
// %d 는 10진수의 '값'을, ' %p 는 10진수 값의 '주소값' 을 출력해줄 때 쓴다라는 차이점이 있다.
printf("%p %p %p\n",i,*pi,**dpi);
// 여기서는 %d 를 썼다면, 22 가 출력됬을 것이지만, %p 를 썼기 때문에 10진수 값 22의 주소값이 출력된다.
**dpi = *pi +2;
// i = i+2 와 같은 값, 위와 같은 원리.
printf("%p %p %p\n",i,*pi,**dpi);
return 0;
}