나는 혼란 스럽다. 첫째메모리 할당과 NULL 포인터
:
int *ptr;
ptr = malloc(10 * sizeof(int));
배열 같은 시간를 컴파일하지 , 런타임에서 동적 (힙) 메모리를 얻기의이 유형.
malloc()
은 메모리가없는 경우 NULL
이 될 수 있습니다. malloc
반환 NULL
가하고 컴파일러가 void *0
와 NULL
을 대체하는 방법, 런타임에서 실행하고 내가 알고있는 경우
그리고 NULL
는 #define NULL ((void *)0)
그래서 표준 C 라이브러리에서 #define
어떤 텍스트 대체는 에서 발생합니다 사전 컴파일 단계
엄밀히 말하면,'malloc'은'NULL'을 리턴하지 않습니다. 'void *'형의 널 포인터를 반환한다. 'NULL' 매크로는'void *'타입의 널 포인터 또는 값이 0 인 정수형 상수로 평가되는 표현식으로 확장되도록 정의됩니다. 이것은 구현에 달려 있습니다. 따라서,'malloc'은 실패했을 때'NULL'과 같은 값을 반환하지만'NULL'과 같은 타입 일 필요는 없습니다.'NULL'은 매크로이기 때문에 확실히'NULL'이 아닙니다. "매크로를 반환하는"함수. 함수는 값을 반환합니다. –