🏷️null pointer 2
📌null pointer constant vs null pointer
- null pointer constant(널 포인터 상수):
0 값을 갖는 정수 상수 혹은 void *형으로 변환된 그와 같은 수식
(int *)0
(int *)(void *)0
- 첫 줄에서는
0부분이 null pointer constant고, 아래 줄에서는 (void *)0 부분이 null pointer constant다.
(int *)로의 변환까지 포함하면 int * 형의 null pointer 되는 것이다.
- null pointer constant -> 함수 포인터로의 변환에도 아무런 문제가 없지만, 일단 대상체 포인터로 변환된 null pointer(
int *형의 null pointer)는 함수 포인터로 다시 변환할 수 없다.
- cf. KLDP(전웅)
📌포인터 문맥에서의 널 포인터 상수 변환
0
(void *)0
- 포인터 문맥인 경우
(void *)0이 통째로 널 포인터 상수가 된다.
- 포인터 문맥이 아닌 경우
(void *)가 포인터 문맥으로 만들어 준다.
- 따라서
0만 널 포인터 상수가 된다.
- 최종적으로 void *형의 널 포인터가 된다.
(int *)0
(int *)가 위 수식을 포인터 문맥으로 만들어 주기에, 포인터 문맥이든 아니든 상관 없다.
0이 널 포인터 상수가 된다.
- 전체는 int *형 널 포인터가 된다.
(int *)(void *)0
(int *)가 포인터 문맥으로 만들어 준다. ((int *)0 케이스와 동일)
(void *)0이 널 포인터 상수가 된다.
- 전체는 int *형 널 포인터가 된다.
- cf. null pointer개념과 null 문자열(
""), ASCII의 NUL문자와는 관련이 없다.