【问题标题】:Does this function return the same pointer as its argument?此函数是否返回与其参数相同的指针?
【发布时间】:2010-12-20 18:38:46
【问题描述】:

我用 C 写了这个函数:

void *PWNRetain(void *object) {
  PWNObject *obj = (PWNObject *)object; // <-- looks stupid, I know :)
  obj->retainCount++;
  return obj;
}

重要的是这将返回与其参数相同的指针。 obj 是否等于 object,还是我又犯了一个指针错误?谢谢。 :)

【问题讨论】:

  • 您不需要返回该指针,只需将其设为void PWNRetain(void* object)
  • 确实需要返回那个指针。这就是我问这个问题的原因。
  • 我只是想知道,为什么不把return object;放在最后?
  • @Dan,因为它在任何方面都无关紧要。 return obj; 提供更小的代码,因此编译速度更快。
  • 哦,好的。好吧,在这种情况下,您可以将object 重命名为o 并执行return o;。更小的代码和更快的编译。 :p

标签: c pointers struct


【解决方案1】:

是的,这将在 C 中返回相同的指针。事实上,您不需要在第二行进行显式转换,因为 C 允许从 void * 到其他指针类型的隐式转换。

【讨论】:

  • 如果他的回答回答了问题,您应该将其标记为已接受(左侧数字下方的大勾号)。
【解决方案2】:

通常,人们会使用其结构的前向声明来启用类型安全,但您的代码将按预期运行并且确实返回相同的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多