我很困惑.
第一:
int *ptr;
ptr = malloc(10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
这种类型在运行时获取动态(堆)内存,而不是像数组一样编译时.
malloc()NULL如果没有记忆,可能会返回.
并且NULL是#define标准C库中的一个#define NULL ((void *)0)
所以,如果malloc返回NULL它在运行时执行,编译器将如何替换NULL,void *0我知道任何文本替换发生在预编译阶段
不,你错了.想象一下这样的malloc函数:
void *malloc(size_t n)
{
/* magic */
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
当编译NULL 该转换单元时,编译器将替换,即编译标准库时,不会NULL在预处理器阶段之后存活.在那之后,为了它的价值,malloc只返回数字.