본문 바로가기
C,C++

이중포인터

by dragonDeok 2022. 2. 3.
728x90

C언어로 PostgreSQL과 연동해 CLI에서 음식을 주문하는 대화형 프로그램을 구현할 때 이중포인터 때문에

고생했던 기억이 난다. 이 당시 PGresult 구조체의 주소값을 받아왔어야 됐는데, 받을 때 이중포인터가 아닌

그냥 포인터로 받아와서 함수 내에서 받아온 값을 핸들링한다고 해도 실제 main에 있는 원본은 변화가

없었다.

 

아무래도 이중포인터는 평생 나를 괴롭힐 것 같아 확실히 정리해두고 가야 할 것 같아서 정리한다.

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

void setToNull(int**);

int main(){
  int five = 5;
  int* ptr = &five;

  printf("&ptr:%p | ptr(변수 five의 주소값 ): %p\n",&ptr,ptr); 
  setToNull(&ptr); 

  if(ptr != nullptr){ 
    cout <<*ptr << endl;
  } else{
    cout << "ptr is null";
  }

  return 0;
}

void setToNull(int** tempPtr){
  printf("tempPtr:%p | &tempPtr:%p | *tempPtr :%p\n",tempPtr,&tempPtr,*tempPtr);
  *tempPtr = nullptr;
}

실행 결과

&ptr         =>  0061FF08

ptr           =>  0061FF0C


tempPtr     =>  0061FF0C

&tempPtr   =>  0061FEF0

*tempPtr    =>  0061FF0C

main에 있는 ptr이 nullptr로 바뀌어서 "ptr is null" 이 출력된다.

 

 

실행 결과 ( 그림을 통한 이해 )