프로그래밍

C/C++ 언어에서 사용하는 ₩0, NULL, 0, \0 차이점 알아보자


시언어에서 NULL은 헤더파일에 정의된 매크로로 null pointer constant이다.  컴파일러에 의해 (void*)0 으로 정의된다.

일반적으로 C언어에서 stdio.h 파일, C++에서 iostream 헤더파일을 include 시에 사용할 수 있다.  NULL은 0 주소를 의미하기 때문에 포인터 변수를 초기화 시에 사용한다. 

다음 예를 보자.

char *name = NULL

char *name = 0

위 두개의 선언은 같은 의미라 볼 수 있다.

포인터를 초기화 시에 0은 0 주소라는 것을 알고 있다는 가정하에 쓰기 때문에 NULL과 0의 의미를 동일하게 본다. 

숫자 0과 구분해주기 위해 ‘₩0’으로 사용된다. 문자 0은 아스키 코드값은 0x30으로 다르다.

시언어에서 자동으로 초기화된 문자열 다음에 null문자(\0)가 추가된다. 프로그래머가 직접 넣어줄 수도 있다.

NULL을 32비트로 표현시 0x00000000 64비트로 표현시 0x00000000’00000000 정의된다.

Advertisements

다음 예제의 실행결과를 보면 좀 더 이해하는데 도움이 된다

#include

 <stdio.h>

int     main(void)
{
        int int_n1 = 0;         // 1. ASCII 0 (decimal)

        char str_n1 = 0;       // 2. ASCII 0 (decimal)
        char str_n2 = '0';     // 3. ASCII 48 (decimal)
        char str_n3 = '\0';    // 4. ASCII 0 (decimal)

        char *str_n4 = 0;      // 5. ASCII 0 (decimal) 
        char *str_n5 = "";     // 6. Empty string
        char *str_n6 = '\0';   // 7. ASCII 0 (decimal)
        char *str_n7 = NULL;   // 8. NULL pointer

        printf("====결과출력====\n");
        printf("##  int_n1  : %d\n", int_n1);
        printf("\n");
        printf("##  str_n1 : %c\n", str_n1);
        printf("##  str_n2 : %c\n", str_n2);
        printf("##  str_n3 : %c\n", str_n3);
        printf("\n");
        printf("##  str_n4 : %s\n", str_n4);
        printf("##  str_n5 : %s\n", str_n5);
        printf("##  str_n6 : %s\n", str_n6);
        printf("##  str_n7 : %s\n", str_n7);
        return (0);
}



0을 int(4byte)로 출력하면 0이 출력되지만, char(1byte)로 출력하면 아무것도 출력되지 않는다.

문자에 매핑한 0은 ASCII Code에 따라 NUL 문자가 되기 때문이다.

한편 포인터 변수에 0을 넣으면 NULL pointer을 넣은 것과 동일해진다.

5. 6. 7.은 Empty string이다.


위 코드의 출력 결과는 아래와 같다.

====결과출력====

##  int_n1  : 0

##  str_n1 :
##  str_n2 : 0
##  str_n3 :

##  str_n4 : (null)
##  str_n5 :
##  str_n6 : (null)
##  str_n7 : (null)

Leave a Reply

error: Content is protected !!