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
回答你的问题:不,没有必要转换NULL
为特定的指针类型.编译器为特殊情况设置NULL
并允许将其分配给任何指针类型,而不指示指针类型转换警告.
同样,在比较时NULL
,没有必要施放:
if (aux->ptr != NULL) {
Run Code Online (Sandbox Code Playgroud)