8

我在 C 中有这段代码:

void f(void *x) {
    printf(">>> %p\n", x);
}

int main() {

  f NULL;
    return 0;
}

我认为是针对 NULL 的定义,但我想解释一下以澄清我的疑问。

4

2 回答 2

9

如果NULL定义为((void *)0)or (0),那么这将扩展为f ((void *)0)or f (0),这是正确的函数调用。编译期间任何非括号内的代码都会出错。

于 2013-05-31T08:09:51.363 回答
2

在 CNULL中通常定义如下:

#if !defined(NULL)
    #define NULL ((void*)0)
#endif

如果是这种情况,那么NULL只是一个特殊的指针,并且您的示例有效。

于 2013-05-31T08:10:08.790 回答