#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;
}
'C&C++_Basic > C_Pointer' 카테고리의 다른 글
C언어 char변수 16진수 4칙연산 (2) | 2020.03.19 |
---|---|
C언어 char* int* 형변환 (0) | 2020.03.19 |
C언어 원금,예금출력 (0) | 2020.03.19 |
#C언어 배열 : 이차원 " 배열 포인터 " (0) | 2020.01.14 |
# C언어 포인터 : const 포인터 상수 기초 1( 포인터에 붙이기 VS 상수에 붙이기 ) (0) | 2020.01.14 |