C언어에서 NULL과 0 의 차이점이 뭔가요?
NULL이 0과 똑같은 역할을 하는 건 줄 알았는데
srand(time(NULL))에서 NULL이 뭔 역할을 하는지에 대한 설명을 보니까 0과 완전히 같은 건 아닌 듯하더군요.
뭔가 포인터랑 관련이 있어 보여 구글에 검색해보니 아무것도 가리키지 않는 포인터라고 하던데 정확한 의미를 모르겠습니다.
이게 0과 다른 점이 정확히 무엇인가요???
C언어에서 NULL과 0 의 차이점이 뭔가요? 라고 질문주셨네요.
보통 프로그램에서 null , 0 , undefined 는 비슷하지만 정확하게는 다른것입니다.
null = 비어있다는거죠, 변수를 예를들면 이 변수는 정의는 되었지만 가르키는것이없다. 비어있다.
0 = 없다, 정말로 숫자 0 혹은 char "0", 미지정시 디폴트 변수값
undefined = 아예 정의된적조차없다, 내부에 defined 하기 위한 행위가 일어난적이 없다.
이렇게 보셔야 합니다.
C에서 pointer와 정수는 서로 형 변환될 수 있는데, Null pointer는 정수 0으로 변환될 수 있고, 정수 0은 Null pointer로 변환될 수 있습니다. 이것이 의미하는 바는 Null pointer는 메모리 주소 0을 가르키는 pointer라는 뜻입니다. 0번지는 일반적으로 접근할 수 없는 메모리 영역입니다. 때문에 pointer가 아무것도 가르키지 않을 때 Null pointer로 초기화 합니다.
Null pointer의 일반적인 개념은 위와 같습니다만, pointer를 인수로 받는 함수에서 Null pointer에 대한 해석은 함수마다 다를 수 있습니다. time 함수의 경우 현재 시간을 반환하게 되는데, 인수가 Null pointer가 아닐 경우에는 pointer가 가르키는 위치에도 현재 시간을 저장하게 됩니다. time 함수처럼 Null pointer를 받아들일 수 있는 함수가 있고, free 함수처럼 Null pointer를 받아들일 경우 아무 동작도 하지 않는 함수도 있으며, 어떤 함수는 Null pointer를 받아들이면 오류가 발생할 수도 있습니다.
0 과 NULL은 개념상에 차이를 둘려고 구분 하는거죠.
물리적으로는 같습니다.
단지 코팅의 가독성을 주려고 구분해서 사용 합니다.
NULL 대신 0을 사용 해두 동작에는 아무런 차이가 발생 하지 않습니다.
프로그램 적으로
0은 0의 값을 의미 하도록 하고
NULL은 값이 없음을 의미 하도록
개념 적인것 이면
이는 다른 이가 봤을때 어떤 의도로 이 값을 사용 했는지 알려 주기 위함이죠...
안녕하세요.
다른 답변자 분들이 설명 해주셨듯이 편하게 생각하시면 될듯합니다.
숫자 0은 말 그대로 0입니다.
NULL은 의미적으로 없다 라고 생각하시면 되고요~
NULL의 선언을 따라가 보세요. 객체 생성에 필요한 클레스가 작성성 된 afx.h를 보시면
///////////////////////////////////////////////////////////////////////////// // Basic types // abstract iteration position struct __POSITION {}; typedef __POSITION* POSITION; // Standard constants #undef FALSE #undef TRUE #undef NULL #define FALSE 0 #define TRUE 1 #define NULL 0 /////////////////////////////////////////////////////////////////////////////NULL은 0으로 정의 되어있는것을 보실수있습니다.
위를 보시면 FALSE도 0으로 정의 되어있는데 NULL 대신 FALSE를 사용하시는 것은 문법적으로
잘못된것입니다.
0은 0이요 NULL은 없다, 비어있다의 의미 입니다.