NULL과 0

왼쪽 코드 맨아래 설명을 생략하신거 같은데요 NULL은 숫자 0이 아니잖아요
그래서 NULL==0은 거짓이니까 0이라고 생각했습니다
그래서 저는 출력 시 NULL==0의 결과: 0 이라고 생각했거든요
그런데 오른쪽 출력값에 1이라고 나와있더라구요 오타인가요? 아니면 제가 이해를 잘 못한건가요??
답변 2
0
안녕하세요.
오타 아니고, 출력값 1이 맞습니다. 헷갈리신 지점이 아주 흔하면서도 중요한 부분이에요.
핵심은 C에서 정수 리터럴 0이 단순한 숫자 역할만 하는 게 아니라, "널 포인터 상수(null pointer constant)" 라는 특별한 역할도 겸한다는 점입니다.
포인터와 0을 비교하는 자리에서는 이 0이 자동으로 "널 포인터"로 취급합니다.
그래서 NULL == 0은 실제로 이렇게 평가됩니다:
NULL→ 널 포인터0→ 포인터와 비교되는 자리에 있으므로 널 포인터로 변환됨결과: 널 포인터 == 널 포인터 → 같음 → 참 →
1
"NULL은 숫자 0이 아니니까 다르다, 그래서 거짓"이라는 추론은 자연스럽지만, C 표준이 "포인터와 비교되는 0은 널 포인터를 뜻한다"고 명시적으로 정해놨기 때문에 그 규칙에 걸립니다.
C언어에서는 NULL == 0의 비교 결과는 표준이 항상 참이 되도록 보장합니다. 그리고 이건 슬라이드 위쪽에 나오는 '\0'과는 살짝 다른 개념이라 구분해두면 좋습니다:
'\0'→ 값이 0인 문자(char). 그래서if('\0')은 거짓.NULL→ 아무것도 안 가리키는 포인터. 그래서 포인터가 NULL이면if(ptr)는 거짓.
둘 다 "0과 얽힌 falsy 값"이라 함께 묶여서 나오지만, 하나는 문자고 하나는 포인터라는 점만 기억하시면 되겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 가보자고님.
C 언어에서 NULL과 숫자 0의 관계에 대한 질문을 주셨군요. 혼란을 겪는 부분에 대해 설명드리겠습니다.
NULL과 숫자 0의 관계
NULL: C 언어에서
NULL은 보통 포인터의 초기화에 사용되며, 정수형0으로 정의되는 경우가 대부분입니다. 이는stdio.h등의 헤더 파일에서#define NULL ((void*)0)와 같은 방식으로 정의될 수 있습니다. 따라서NULL과0은 동일한 값으로 간주될 수 있습니다.0: 정수
0은 C에서 거짓으로 판단됩니다. 그러나NULL역시 정수형 0으로 표현되므로NULL == 0은 참(1)으로 평가됩니다.
아마도 코드의 실행 결과에서 NULL == 0이 1로 나오는 것이 놀라우셨던 것으로 보입니다. 이는 오타가 아니라 C 언어의 정의에 따른 결과이므로 정확하게 이해하신 것입니다.
관련된 내용을 더 잘 이해할 수 있는 유사한 질문과 답변을 확인해 보시면 도움이 될 수 있습니다:
- C언어에서 NULL과 0의 비교: C언어에서 NULL과 0이 어떻게 작동되는지를 다룬 질문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
9강 35분경 질문있습니다
0
12
1
11강 3:20
0
12
1
10강 11:42
0
13
1
9강 26:23
0
19
1
9강 23:46
0
12
0
코드 중간에 . 붙은건 뭐라고 봐야할까요?
0
25
2
설명중 단어 의미 해석 문제.
0
18
1
수강 섹션마다 옆에 자료 다운로드 버튼이 있는데. 다운받으면 무슨내용이 있는건가요?
0
15
1
SQL 집중학습
0
34
1
26년 1회 기출문제 11번 질문드립니다
0
34
1
업캐스팅 문제예시5 & 업캐스팅 문제 예시 6
0
33
1
V1.2 VS V.091
0
38
2
split('T')일때는 T만 제거되는거고 공백은 제거되지 않는 건가요?
0
41
2
파이썬 언어 업데이트, 언어별 학습자료 업데이트
0
46
2
C, java, python 언어 기출문제 강의 질문
0
45
2
1:26 에서 반복문 i[1] 이니까 0 다음 두번째 항목들 아닌가요
0
43
2
d
0
41
2
출력값
0
41
2
(기출) 2023년 3회 코드해석 문제의 1:10입니다.
0
44
2
23년도 2회 c언어 0:03 n[(i+6)%5] 도 가능한건가요?
0
46
2
정처기 질문
0
51
2
자식 기본 생성자 출력 조건
0
44
2
부모 및 자식 기본생성자 호출
0
44
2
포인터 16강 9:44
0
32
1





