포인터가 C++에서 NULL인지 확인

Jinku Hu 2023년10월12일
  1. 포인터가 C++에서 NULL인지 확인하려면 nullptr과 비교
  2. 포인터가 C++에서 NULL인지 확인하려면 0과 비교 사용
  3. 포인터 값을 조건으로 사용하여 C++에서 포인터가 NULL인지 확인
포인터가 C++에서 NULL인지 확인

이 기사에서는 C++에서 포인터가 null인지 확인하는 방법에 대한 여러 방법을 보여줍니다.

포인터가 C++에서 NULL인지 확인하려면 nullptr과 비교

C++ 언어는 메모리를 직접 조작하는 여러 저수준 기능을 제공하고 메모리 주소를 가리키는 객체 인 ‘포인터’의 개념을 지정합니다. 일반적으로 포인터는 실행중인 프로그램에서 사용하는 일부 개체를 가리켜 야합니다. 그러나 포인터를 어떤 객체도 가리 키지 않는 널 포인터로 선언 할 수도 있습니다.

null 포인터는 리터럴 nullptr값 또는 정수 0을 할당하여 초기화됩니다. 그러나 최신 C++에서는 오버로드 된 함수를 사용할 때 원하지 않는 결과를 초래할 수 있으므로 포인터의 0초기화를 피할 것을 제안합니다. 다음 예제에서는 포인터가 nullptr과 같지 않은지 확인하고 조건이 충족되면 조작 할 수 있습니다.

#include <iostream>

using std::cout;
using std::endl;

#define SIZE 123

int main() {
  char *arr = (char *)malloc(SIZE);

  if (arr != nullptr) {
    cout << "Valid pointer!" << endl;
  } else {
    cout << "NULL pointer!" << endl;
  }

  free(arr);
  return EXIT_SUCCESS;
}

출력:

Valid pointer!

포인터가 C++에서 NULL인지 확인하려면 0과 비교 사용

C 표준 라이브러리에 뿌리를두고 레거시 코드에서 자주 사용되는NULL이라는 전 처리기 변수도 있습니다. 현대의 C++ 프로그래밍에서NULL을 사용하는 것은 정수0으로 초기화하는 것과 동일하고 이전 섹션에서 언급 한대로 문제가 발생할 수 있으므로 사용하지 않는 것이 좋습니다. 그래도 다음 코드 샘플에서 설명하는 것처럼 포인터를 0과 비교하여 포인터가 null인지 확인할 수 있습니다.

#include <iostream>

using std::cout;
using std::endl;

#define SIZE 123

int main() {
  char *arr = (char *)malloc(SIZE);

  if (arr != 0) {
    cout << "Valid pointer!" << endl;
  } else {
    cout << "NULL pointer!" << endl;
  }

  free(arr);
  return EXIT_SUCCESS;
}

출력:

Valid pointer!

포인터 값을 조건으로 사용하여 C++에서 포인터가 NULL인지 확인

Null 포인터는 논리식에 사용될 때 false로 평가됩니다. 따라서 주어진 포인터를if 문 조건에 넣어 널인지 확인할 수 있습니다. 널 포인터를 역 참조하면 정의되지 않은 동작이 발생하여 대부분의 경우 프로그램이 비정상적으로 종료됩니다.

#include <iostream>

using std::cout;
using std::endl;

#define SIZE 123

int main() {
  char *arr = (char *)malloc(SIZE);

  if (arr) {
    cout << "Valid pointer!" << endl;
  } else {
    cout << "NULL pointer!" << endl;
  }

  free(arr);
  return EXIT_SUCCESS;
}

출력:

Valid pointer!
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C++ Pointer