Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 NULL 포인터 완벽 정리: 개념부터 활용법까지

C 언어에서 NULL 포인터란?


NULL 포인터(null pointer)는 어떤 유효한 객체나 함수도 가리키지 않는 특별한 포인터입니다. C 언어에서 NULL은 stdio.h, stddef.h 같은 헤더 파일에 정의된 매크로로, 일반적으로 0 또는 ((void*)0)으로 표현됩니다. 초기화되지 않은 포인터에는 예측할 수 없는 쓰레기 값(garbage value)이 들어갈 수 있기 때문에, 유효한 주소를 저장하기 전까지는 반드시 NULL로 초기화하는 습관이 중요합니다.


NULL 포인터의 주요 용도


1. 포인터 변수 초기화


포인터 변수에 아직 유효한 메모리 주소가 할당되지 않은 경우, NULL로 초기화하여 '아무것도 가리키지 않는다'는 상태를 명확하게 표현할 수 있습니다.


2. 함수 인자로 NULL 전달


함수를 호출할 때 유효한 메모리 주소를 전달할 필요가 없다면, 함수 인자로 NULL 포인터를 넘겨 값이 없음을 명시적으로 나타낼 수 있습니다.


3. 포인터 접근 전 안전성 검사


포인터 변수에 접근하기 전에 NULL 여부를 먼저 확인하면 체계적인 오류 처리가 가능합니다. 예를 들어 포인터가 NULL이 아닌 경우에만 역참조(dereference)하도록 코드를 작성하면, 잘못된 메모리 접근으로 인한 세그멘테이션 폴트(segmentation fault)와 같은 런타임 오류를 예방할 수 있습니다.


알고리즘


시작.
    정수형(int) 포인터 p를 선언한다.
    p를 NULL로 초기화한다.
    "포인터의 값은"이라는 문구를 출력한다.
    포인터 p의 값을 출력한다.
종료.

예제 코드


#include <stdio.h>
int main() {
    int *p = NULL; // 포인터를 NULL로 초기화
    printf("포인터의 값은 %u", p);
    return 0;
}

실행 결과


포인터의 값은 0

추가 팁: 포인터 출력 시 %p 사용 권장


위 예제에서는 간단한 설명을 위해 %u 서식 지정자를 사용했지만, C 표준에 따르면 포인터 값을 출력할 때는 %p를 사용하는 것이 올바른 방법입니다. %p를 사용하면 플랫폼에 관계없이 포인터 주소를 일관된 형식으로 출력할 수 있으며, NULL 포인터는 보통 0 또는 (nil)로 표시됩니다.


또한 NULL 포인터를 역참조하면 정의되지 않은 동작(undefined behavior)이 발생하므로, 항상 if (p != NULL)과 같은 조건문으로 검사한 후 접근하는 것이 안전합니다.