c언어 포인터의 포인터

c언어 포인터의 포인터

작성일 2024.01.01댓글 1건
    게시물 수정 , 삭제는 로그인 필요

#include <stdio.h>

int main(void)
{
int num = 100; // 변수 선언 
int* ptr_num = &num; // 포인터 선언 
int** pptr_num = &ptr_num; // 포인터의 포인터 선언 
printf("변수 num가 저장하고 있는 값은 %d입니다.\n", num);
printf("싱글 포인터  ptr_num가 가리키는 주소에 저장된 값은 %d입니다.\n", *ptr_num);
printf("더블 포인터 pptr_num가 가리키는 주소에 저장된 포인터가 가리키는 주소에 저장된 값은 %d입니다.\n", **pptr_num);
return 0;
}

실행해본결과
변수 num가 저장하고 있는 값은 10입니다.
싱글 포인터  ptr_num가 가리키는 주소에 저장된 값은 10입니다.
더블 포인터 pptr_num가 가리키는 주소에 저장된 포인터가 가리키는 주소에 저장된 값은 10입니다.

포인터의 포인터?라는 것에대해 공부중인데요 


오른쪽 그림처럼 이렇게 된다고 합니다.
그런데 코딩에서 다른것은 이해되는데
 printf("더블 포인터 pptr_num가 가리키는 주소에 저장된 포인터가 가리키는 주소에 저장된 값은 %d입니다.\n", **pptr_num);
여기서 **pptr_num가 가리키는 것은  ptr의 값 0*12가 나와야하는거 아닌가요?

그리고
int main(void)
{
int num = 100; // 변수 선언 
int* ptr_num = &num; // 포인터 선언 
int* pptr_num = &*ptr_num; // 포인터의 포인터 선언 
printf("변수 num가 저장하고 있는 값은 %d입니다.\n", num);
printf("싱글 포인터  ptr_num가 가리키는 주소에 저장된 값은 %d입니다.\n", *ptr_num);
printf("더블 포인터 pptr_num가 가리키는 주소에 저장된 포인터가 가리키는 주소에 저장된 값은 %d입니다.\n", *pptr_num);
return 0;
}
이렇게 빨간부분으로 바꿔써도 이중포인터 대신 써도 되는건가요? 쓰이는 알고리즘이 비슷해보여서 질문드립니다.


#c언어 포인터의 포인터 #c언어 포인터의 장단점

profile_image 익명 작성일 -

int num = 100; // 변수 선언 int* ptr_num = &num; // 포인터 선언 int** pptr_num = &ptr_num; // 포인터의 포인터 선언

포인터는 어떤 타입이 저장된 메모리의 주소를 저장하는 변수입니다.

메모리의 주소를 갖는 것을 메모리를 가리킨다고 표현합니다.

ptr_num 은 num 의 주소를 갖고 있습니다.

달리 말하면, prt_num 은 num 이라고 불리우는 메모리를 가리킵니다.

그 메모리에는 100 이라는 값이 저장되어 있죠.

*ptr_num 은 ptr_num 에 저장된 주소의 메모리입니다.

num 이라고 불리우는 메모리죠.

이중 포인터인 pptr_num 은 ptr_num 의 주소를 갖고 있습니다.

*pptr_num 은 pptr_num 에 저장된 주소의 메모리 즉 ptr_num 이라고 불리우는 메모리입니다.

**pptr_num 은 *(*pptr_num) = *ptr_num 과 같습니다.

*ptr_num 은 num 이라고 불리우는 메모리입니다.

결국, num 과 *num_ptr 과 **pptr_num 은 모두 같은 메모리입니다.

c언어 포인터 질문

int i=hash(key); Node *prev, *p; for(prev=NULL, p=ht[i]; p!=NULL; prev=p, p=p->next){ if(p->key==key) return 0; // 키 중복 } for문이 저렇게 있을 때 prev에는 p->next가...

c언어 포인터 질문

... 가리키는 포인터 변수 두 개를 선언해서 이를 활용하여 저장된 값의 순서를... 출력 잘 되던데 또 어떨때는 안되여........ int count;를 포인터로 선언해야겠죠. int *count;

C언어 포인터 증감

1 2 3 4번에서 증가 시키는게 포인터 p 주소인지 포인터 p가 가리키는 주소의 실제 값인지를 모르겠어요ㅠ 1) *p, v=*p, p++(포인터증가), 이 순서로 연산이 됩니다. 2) *p, v...

c언어 포인터 질문

1번째 사진은 1차원 포인터고 2번째 사진은 2차원 포인터에용 2차원포인터의 주솟값을 일반변수로 이렇게 연필로 써봤는데 맞는건가요? 네 맞습니다. p라는...

c언어 포인터 질문

안녕하세요 c언어 포인터 부분이 도저히 이해가 안가요 도와주세요 바보 한명... 그럼 p는 무엇을 나타내나요 ㅜ.ㅜ 포인터는 주소를 저장하는 변수입니다. 그래서...

C언어 포인터

C언어 포인터의 특징과 포인터에 장점 한가지를 알려주세요 포인터는 어떤 타입이 저장되는 메모리의 주소를 저장하는 변수 또는 자료형을 말합니다. 바꿔말하면, 포인터에...

c언어 포인터 질문드립니다.

지금 c언어 포인터 부분을 공부하고 있습니다. 포인터를 사용해서 변수에 저장된 값을 바꾸는 함수를 만든 후 문득 생각이 들었습니다. [code] #include...

c 언어 포인터의 포인터 질문

c언어를 배우면서 포인터의 포인터부분을 배웠는데 int num=10; int *ptr=# int **bptr=&ptr; 이런식으로 포인터의 주소값을 또 포인터 변수에 할당하는 방식을 굳이 **라는...