🏷️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문자와는 관련이 없다.