포인터 체인 в C
안녕하세요, 미래의 코딩 마법사 여러분! 오늘 우리는 C의 마법의 세계인 포인터 체인을 탐험하게 될 것입니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 나는 당신의 친절한 안내자가 되어 이 주제를 단계별로 다룰 것입니다. 그러면 가상의魔杖(키보드)을 손에 들고, 이제 뛰어들어 보겠습니다!
C에서 포인터 체인이란?
보물 찾기에 나갔을 때, 지도 대신 일련의 단서를 가지고 있다고 상상해 보세요. 각 단서는 다음 단서를 가리키며, 보물로 이어지는 체인을 형성합니다. 그것이 바로 C에서의 포인터 체인입니다!
C 프로그래밍에서 포인터 체인은 각 포인터가 다른 포인터를 가리키는 포인터의序列로, 마지막 포인터는 일반적으로 특정 데이터 유형의 변수를 가리킵니다.
간단한 예제로 시작해 보겠습니다:
int value = 42;
int *ptr1 = &value;
int **ptr2 = &ptr1;
int ***ptr3 = &ptr2;
이 코드에서:
-
value
는 우리의 보물(42인 정수)입니다. -
ptr1
는value
의 주소를 가지고 있는 포인터입니다. -
ptr2
는 포인터를 가리키는 포인터(이중 별표에 주목하세요)로,ptr1
의 주소를 가지고 있습니다. -
ptr3
는 포인터를 가리키는 포인터를 가리키는 포인터(쌍 asterisk!)로,ptr2
의 주소를 가지고 있습니다.
포인터의 러시아 인형처럼입니다! ?
디Referencing은 어떻게 작동하나요?
이제 디Referencing에 대해 이야기해 보겠습니다. 디Referencing은 인형을 하나씩 열어 내부의 인형을 찾는 것과 같습니다. 우리의 포인터 체인에서는 별표(*
)를 사용하여 디Referencing을 합니다.
printf("Value: %d\n", ***ptr3);
이 줄은 세 개의 별표로 인해 무서워 보일 수 있지만, 간단히 설명드리겠습니다:
-
*ptr3
는ptr2
의 주소를 반환합니다. -
**ptr3
(또는*(*ptr3)
)는ptr1
의 주소를 반환합니다. -
***ptr3
(또는*(*(*ptr3))
)는 마침내value
의 값을 반환합니다. 그 값은 42입니다.
"큰 인형을 열고, 그 안에 있는 중간 인형을 열고, 그 안에 있는 작은 인형을 열어 보물을 찾는 것!"과 같습니다.
부동소수점 포인터 체인
이제 부동소수점 수를 사용하여 이를 시도해 보겠습니다:
float pi = 3.14159;
float *fPtr1 = π
float **fPtr2 = &fPtr1;
float ***fPtr3 = &fPtr2;
printf("Value of pi: %f\n", ***fPtr3);
이 작업은 우리의 정수 예제와 같은 방식으로 작동하지만, 부동소수점 수를 사용합니다. ***fPtr3
를 인쇄할 때, 우리는 체인의 포인터를 거쳐 pi
값을 반환합니다.
원본 변수를 디Referencing하여 업데이트
포인터 체인의 멋진 점 중 하나는 원본 값을 수정할 수 있다는 점입니다. 어떻게 하는지 보겠습니다:
int score = 85;
int *scorePtr1 = &score;
int **scorePtr2 = &scorePtr1;
printf("Original score: %d\n", score);
**scorePtr2 = 90; // 포인터 체인을 통해 값 업데이트
printf("Updated score: %d\n", score);
이 예제에서 우리는 **scorePtr2
를 사용하여 score
의 값을 변경하고 있습니다. 보드를 업데이트하는 것처럼 메시지를 사람들의 체인을 통해 보내는 것과 같습니다!
문자 포인터 체인
마지막으로, 문자 포인터를 사용한 약간 더 복잡한 예제를 마무리해 보겠습니다:
char letter = 'A';
char *charPtr1 = &letter;
char **charPtr2 = &charPtr1;
char ***charPtr3 = &ptr2;
printf("Original letter: %c\n", ***charPtr3);
**charPtr2 = 'B'; // 값 업데이트
printf("Updated letter: %c\n", letter);
이 작업은 우리의 이전 예제와 같은 방식으로 작동하지만, 문자를 사용합니다. 우리는 체인을 통해 'A'에서 'B'로 문자를 변경할 수 있습니다.
방법 표
여기서 논의한 방법을 요약하는 유용한 표를 제공합니다:
방법 | 설명 | 예제 |
---|---|---|
포인터 생성 |
& 연산자를 사용하여 변수의 주소를 가져옵니다 |
int *ptr = &value; |
디Referencing |
* 연산자를 사용하여 포인터가 가리키는 값을 액세스합니다 |
int x = *ptr; |
포인터의 포인터 생성 | 이중 별표 ** 를 사용합니다 |
int **ptr2 = &ptr1; |
체인 디Referencing | 여러 별표를 사용합니다 | int value = ***ptr3; |
체인을 통해 업데이트 | 디Referencing된 포인터를 사용하여 값을 할당합니다 | **ptr2 = 90; |
그렇게 해서 우리는 C의 포인터 체인의 복잡한 길을 거쳤습니다. 연습이 완벽을 만든다는 것을 기억하고, 이 개념들을 실험해 보지 마세요. 언제쯤 당신은 마법사처럼 포인터를 다루게 될 것입니다! ?
행복한 코딩을 하고, 항상 포인터가 올바른 방향을 가리키기를 바랍니다! ?
Credits: Image by storyset