null pointer 2

MySprtlty·2023년 10월 2일
0

C

목록 보기
20/37

🏷️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

  • 포인터 문맥인 경우
    • 널 포인터 상수가 된다.
  • 포인터 문맥이 아닌 경우
    • 정수 상수 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문자와는 관련이 없다.

0개의 댓글