널 포인터
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 4번째.
포인터를 선언할 때, 그것이 자동으로 의미 있는 무언가를 가리키지는 않습니다. 초기화되지 않은 포인터는 무작위 메모리 주소를 포함하고 있으며, 이를 사용하려고 하면 심각한 오류가 발생할 수 있습니다. 이것이 바로 안전한 프로그래밍을 위해 널 포인터(null pointers)가 필수적인 이유입니다.
널 포인터(null pointer)는 명시적으로 아무것도 가리키지 않는 포인터입니다. 현대적인 C++에서는 nullptr로 초기화하여 널 포인터를 생성합니다:
int* ptr = nullptr; // ptr은 이제 널 포인터입니다nullptr 키워드는 포인터가 유효한 메모리 위치를 가리키고 있지 않음을 나타냅니다. 이는 포인터를 초기화하지 않은 상태로 두는 것보다 훨씬 안전합니다. 포인터를 역참조하기 전에 포인터가 null인지 확인할 수 있기 때문입니다.
포인터를 사용하기 전에, 간단한 if 문을 사용하여 해당 포인터가 null이 아닌지 확인해야 합니다:
if (ptr != nullptr) {
// 여기서 *ptr을 안전하게 사용할 수 있습니다
int value = *ptr;
}이 관행은 유효하지 않은 메모리 위치에 접근하여 프로그램이 충돌하는 것을 방지합니다. 포인터를 선언할 때 항상 nullptr로 초기화하고, 역참조하기 전에 null 여부를 확인하세요.
챌린지
쉬움역참조하기 전에 null 포인터를 확인하여 안전한 포인터 사용을 보여주는 프로그램을 작성하세요.
다음과 같은 입력이 제공됩니다:
"valid"또는"null"중 하나인 문자열
프로그램은 다음을 수행해야 합니다:
data라는 이름의 정수 변수를 선언하고42로 초기화합니다.ptr이라는 이름의 포인터를 선언합니다.- 입력이
"valid"인 경우,data의 주소를ptr에 할당합니다. - 입력이
"null"인 경우,nullptr을ptr에 할당합니다. - if문을 사용하여
ptr을 사용하기 전에 null이 아닌지 확인합니다. - 포인터가 null이 아니면, 포인터가 가리키는 값을 출력합니다.
- 포인터가 null이면, 안전 메시지를 출력합니다.
다음과 같은 정확한 출력 형식을 사용하세요:
Value: [value]null 포인터의 경우, 다음 형식을 사용하세요:
Pointer is null - cannot dereference치트 시트
정의되지 않은 동작을 방지하기 위해 포인터를 nullptr로 초기화하세요:
int* ptr = nullptr; // ptr은 이제 null 포인터입니다역참조하기 전에 항상 포인터가 null이 아닌지 확인하세요:
if (ptr != nullptr) {
// 여기서 *ptr을 안전하게 사용할 수 있습니다
int value = *ptr;
}nullptr 키워드는 포인터가 유효한 메모리 위치를 가리키고 있지 않음을 명시적으로 나타내어, 코드를 더 안전하게 만들고 잘못된 메모리 접근으로 인한 충돌을 방지합니다.
직접 해보기
#include <iostream>
#include <string>
using namespace std;
int main() {
// 입력 읽기
string input;
cin >> input;
// data 변수 선언
int data = 42;
// TODO: 여기에 코드를 작성하세요
// - ptr이라는 이름의 포인터 선언
// - 입력을 확인하고 ptr에 적절한 값 할당
// - if문을 사용하여 포인터를 안전하게 확인하고 사용
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.