我可以在期望int *的地方传递NULL吗?

时间:2013-01-12 16:57:38

标签: c pointers null function-prototypes

我有一个带有以下原型void init(int *argc,char**argv);的函数,但是在我的程序中随后调用此函数我不需要甚至不需要提供这样的参数。所以我创建了一个名为int_null的变量(哦,坏名字,我知道)并传递给函数init(&int_null, NULL)但是我想到NULL标准值为零,我可以使用它代替int_null变量(仅用于避免创建此变量),因为下面的init(NULL,NULL)它可以正常工作。但我可以遇到一些问题吗?某些实现将NULL定义为(void*)000L,我确定它是否可能存在问题。该函数需要理解argc为零。

2 个答案:

答案 0 :(得分:5)

char **bla1 = (void *) 0;
char **bla2 = 0;
char **bla3 = 0L;

所有这些分配(初始化按照分配完成)在C和等效中都有效。

如果预期参数的类型为NULLint *,则可以始终传递char **

正如@R..在他的评论中添加的那样,这最后一句是正确的,但除了接受在prototyped(旧式)语法中定义的可变数量的参数和函数的函数之外。在这两种情况下都需要演员表。

答案 1 :(得分:2)

NULL应该有效;可以将0(void *)0分配给C中的任何指针类型。