NULL과 0

왼쪽 코드 맨아래 설명을 생략하신거 같은데요 NULL은 숫자 0이 아니잖아요
그래서 NULL==0은 거짓이니까 0이라고 생각했습니다
그래서 저는 출력 시 NULL==0의 결과: 0 이라고 생각했거든요
그런데 오른쪽 출력값에 1이라고 나와있더라구요 오타인가요? 아니면 제가 이해를 잘 못한건가요??
Câu trả lời 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이 어떻게 작동되는지를 다룬 질문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
정처기 필기 준비할때 이 이론을 다시 외워도 될까요?
0
27
1
조건 반복문 질문: for 문 ?
0
56
1
정처기 26-2회. 9번 질문드립니다!
0
75
1
이론 보면서 질문이 있습니다.
0
68
2
정보처리기사 실기 26년 2회 SRT 스케줄링 문제 단위 질문
0
81
2
유튜브(정보처리기사 실기 | 26년 2회 기출문제 코드 해설)
0
132
2
262 정처기 실기 C언어코딩
0
42
1
정보처리기사 262 실기 Hash(해시) 질문
0
72
2
static 변수 질문입니다.
0
58
2
파이썬 4강 질문입니다.
0
66
2
모의고사 1회 3번문제
0
83
3
41강 30:10
0
64
2
이론 공부법 질문 있습니다.
0
84
2
부모의 생성자 관련 질문
0
61
2
시험지 문제에 필기해도 되나요?
0
84
3
41강 11:23
0
52
2
4강파이썬 질문입니다
0
50
2
try-catch 핸들러명
0
63
2
36강 3:48
0
62
2
35강 18:27
0
64
2
자식 코드 내 super() 생략
0
59
2
출력질문
0
72
2
31강 4:06
0
63
2
파이썬 학습자료가 강의 자료와 다릅니다.
0
92
3

