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" 이 출력된다.
실행 결과 ( 그림을 통한 이해 )
'C,C++' 카테고리의 다른 글
C++ 멤버 초기화 리스트 (0) | 2022.04.10 |
---|---|
C++ 가상 함수(virtual function) (0) | 2022.04.09 |
c++에서 string 클래스를 이용한 문자열 사용 ( getline() ) (0) | 2022.03.12 |
배열의 크기를 넘어가서 사용할 경우 (0) | 2022.02.14 |
c언어 문자열 (0) | 2022.02.04 |