반응형
앞서 간단하게 포인터란 무엇인지, 예제를 통해 설명.
https://ansan-survivor.tistory.com/1237
보통 일반적으로 많이 사용되는 것은, * 하나만을 사용하는 "싱글포인터"이다.
때로는 필요에 의해 포인터에서 또다른 포인터로 참조를 하는 더블포인터, 또 더 참조하면 트리플포인터 까지 사용된다.
위와 같은 다중포인터에 대한 예제.
1. double* ptr = # => ptr의 타입은 double* 으로 num의 주소값을 저장.
2. double* *dptr = &ptr; => dptr은 double* 타입인 ptr이 대입되므로, *을 하나 더 붙여 double** 으로 만듦
#include <stdio.h>
/*
포인터의 포인터에 대한 이해.
변수의 주소값을 저장하기 위해서 * 을 추가 하기만 하면 된다.
*/
int main()
{
double num = 3.14;
double* ptr = #
// ptr의 타입이 double* 이므로 dptr을 포인터 선언하기 위해서는 *를 더 붙인다.
double** dptr = &ptr;
// dptr의 타입이 double** 이므로 tptr을 포인터 선언하기 위해서는* 를 더 붙인다.
double*** tptr = &dptr;
/*
위에 포인터의 정의를 통해, (참조관계)
tptr -> dptr -> ptr -> num 이런식으로 포인터가 가리키고 있다.
*/
printf("num값: %f\n", num);
printf("ptr값: %f\n", *ptr);
printf("dptr값: %f\n", **dptr);
printf("tptr값: %f\n", ***tptr);
return 0;
}
반응형
위와 같은 참조 관계가 구성되어있기 때문에, num의 값을 새로운 포인터변수로 바꿔주면 모두 바뀌게 된다.
#include <stdio.h>
/*
포인터의 포인터에 대한 이해.
변수의 주소값을 저장하기 위해서 * 을 추가 하기만 하면 된다.
*/
int main()
{
double num = 3.14;
double* ptr = #
// ptr의 타입이 double* 이므로 dptr을 포인터 선언하기 위해서는 *를 더 붙인다.
double** dptr = &ptr;
// dptr의 타입이 double** 이므로 tptr을 포인터 선언하기 위해서는* 를 더 붙인다.
double*** tptr = &dptr;
// 새로운 ptr2선언
double* ptr2 = NULL;
ptr2 = #
*ptr2 = 5.2;
/*
위에 포인터의 정의를 통해, (참조관계)
tptr -> dptr -> ptr -> num 이런식으로 포인터가 가리키고 있다.
*/
printf("num값: %f\n", num);
printf("ptr값: %f\n", *ptr);
printf("dptr값: %f\n", **dptr);
printf("tptr값: %f\n", ***tptr);
return 0;
}
가리키고 있는 대상의 주소값을 확인하기
#include <stdio.h>
/*
포인터의 포인터에 대한 이해.
변수의 주소값을 저장하기 위해서 * 을 추가 하기만 하면 된다.
*/
int main()
{
double num = 3.14;
double* ptr = #
// ptr의 타입이 double* 이므로 dptr을 포인터 선언하기 위해서는 *를 더 붙인다.
double** dptr = &ptr;
// dptr의 타입이 double** 이므로 tptr을 포인터 선언하기 위해서는* 를 더 붙인다.
double*** tptr = &dptr;
// 새로운 ptr2선언
double* ptr2 = NULL;
ptr2 = #
*ptr2 = 5.2;
/*
위에 포인터의 정의를 통해, (참조관계)
tptr -> dptr -> ptr -> num 이런식으로 포인터가 가리키고 있다.
*/
printf("num값: %f\n", num);
printf("ptr값: %f\n", *ptr);
printf("dptr값: %f\n", **dptr);
printf("tptr값: %f\n", ***tptr);
// 모두 가리키는 대상은 num의 주소값
printf("num주소: %9p\n", &num); // ptr은 num의 주소값을 가리킴
printf("ptr이 가리킴: %9p\n", ptr); // ptr은 num의 주소값을 가리킴
printf("dptr이 가리킴: %9p\n", *dptr);
printf("tptr이 가리킴: %9p\n", **tptr);
return 0;
}
포인터 변수 연산 이해 과정.
아래와 같이 괄호를 활용해서 연산 순서를 이해해보면 더 이해를 잘할 수 있다.
반응형
'C언어 \ C++ > 포인터 \ 배열' 카테고리의 다른 글
[C언어] 포인터 배열, 이중포인터 배열 예제 (배열 내 포인터값을 사용할 경우) (0) | 2022.02.19 |
---|---|
[C언어] 포인터의포인터(더블포인터) Swap함수 예제 (0) | 2022.02.19 |
[C언어] C언어 3차원 배열 선언 및 초기화 (0) | 2022.02.09 |
[C언어] C언어 2차원 배열 선언 및 초기화 (0) | 2022.02.08 |
[C언어] C언어에서 포인터 Const 선언이 갖게 되는 의미 (0) | 2022.02.07 |