포인터 체인 в C

안녕하세요, 미래의 코딩 마법사 여러분! 오늘 우리는 C의 마법의 세계인 포인터 체인을 탐험하게 될 것입니다. 프로그래밍에 새로운 사람이라면 걱정하지 마세요 - 나는 당신의 친절한 안내자가 되어 이 주제를 단계별로 다룰 것입니다. 그러면 가상의魔杖(키보드)을 손에 들고, 이제 뛰어들어 보겠습니다!

C - Chain of Pointers

C에서 포인터 체인이란?

보물 찾기에 나갔을 때, 지도 대신 일련의 단서를 가지고 있다고 상상해 보세요. 각 단서는 다음 단서를 가리키며, 보물로 이어지는 체인을 형성합니다. 그것이 바로 C에서의 포인터 체인입니다!

C 프로그래밍에서 포인터 체인은 각 포인터가 다른 포인터를 가리키는 포인터의序列로, 마지막 포인터는 일반적으로 특정 데이터 유형의 변수를 가리킵니다.

간단한 예제로 시작해 보겠습니다:

int value = 42;
int *ptr1 = &value;
int **ptr2 = &ptr1;
int ***ptr3 = &ptr2;

이 코드에서:

  • value는 우리의 보물(42인 정수)입니다.
  • ptr1value의 주소를 가지고 있는 포인터입니다.
  • ptr2는 포인터를 가리키는 포인터(이중 별표에 주목하세요)로, ptr1의 주소를 가지고 있습니다.
  • ptr3는 포인터를 가리키는 포인터를 가리키는 포인터(쌍 asterisk!)로, ptr2의 주소를 가지고 있습니다.

포인터의 러시아 인형처럼입니다! ?

디Referencing은 어떻게 작동하나요?

이제 디Referencing에 대해 이야기해 보겠습니다. 디Referencing은 인형을 하나씩 열어 내부의 인형을 찾는 것과 같습니다. 우리의 포인터 체인에서는 별표(*)를 사용하여 디Referencing을 합니다.

printf("Value: %d\n", ***ptr3);

이 줄은 세 개의 별표로 인해 무서워 보일 수 있지만, 간단히 설명드리겠습니다:

  1. *ptr3ptr2의 주소를 반환합니다.
  2. **ptr3 (또는 *(*ptr3))는 ptr1의 주소를 반환합니다.
  3. ***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