【问题标题】:Can I pass a NULL where int* is expected?我可以在需要 int* 的地方传递一个 NULL 吗?
【发布时间】:2013-01-12 16:57:37
【问题描述】:

我有一个具有以下原型 void init(int *argc,char**argv); 的函数,但在我的程序中随后调用此函数时,我不需要甚至不需要提供此类参数。所以我创建了一个名为int_null(哦,名字不好,我知道)的变量并传递给函数init(&int_null, NULL),但我想到NULL的标准值为零,我可以使用它而不是int_null变量(只是为了避免创建这个变量),因为下面的init(NULL,NULL) 它工作正常。但我能有什么问题吗?一些实现将NULL 定义为(void*)000L,我确定这是否会成为问题。函数需要明白argc是零。

【问题讨论】:

  • 我相信如果ptr 是任何类型的指针,您几乎可以随时分配prt=NULL 而无需类型转换也没有问题

标签: c pointers null function-prototypes


【解决方案1】:
char **bla1 = (void *) 0;
char **bla2 = 0;
char **bla3 = 0L;

所有这些分配(根据分配完成初始化)在 C 和等效项中都是有效的。

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

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

【讨论】:

  • 嗨哇! ..请查看我对这个问题的评论,如果我错了,请告诉我。很好的回答!
  • @GrijeshChauhan 只要ptr 是指向对象的指针或指向void 的指针,它总是正确的(ptr 不能是函数指针)。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2014-12-26
    • 2021-08-27
    相关资源
    最近更新 更多