是否需要将NULL转换为结构指针类型以便在C中进行赋值/比较?

FRD*_*FRD 2 c null struct pointers

在将指定给结构foo的指针之前,我在学校的老师一直将NULL转换为(struct foo*).例如:

struct foo {
   // smthg else
   struct foo *ptr;
};

struct foo *bar;
bar = (struct foo*)malloc(sizeof(struct foo));
bar->ptr = (struct foo *) NULL;
Run Code Online (Sandbox Code Playgroud)

令我难以置信的是,他唯一一次测试该值是否为NULL(检查链表是否已结束)他执行以下操作

if (aux->ptr != (struct foo *) NULL) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

我问他为什么,如果要"增长"NULL的大小以防止错误或其他什么.但不,他告诉我(非常不情愿,我认为)这是为了防止编译器出现一些可能的错误(wtf?).这真的有必要吗?

编辑:

他教的语言是C.他可能不知道用C语言铸造malloc是不必要的.我想知道他是否只是小心或无能.:P

Gre*_*ill 7

回答你的问题:不,没有必要转换NULL为特定的指针类型.编译器为特殊情况设置NULL并允许将其分配给任何指针类型,而不指示指针类型转换警告.

同样,在比较时NULL,没有必要施放:

if (aux->ptr != NULL) {
Run Code Online (Sandbox Code Playgroud)