当我需要通过指针传递(而不是通过引用)

时间:2010-10-14 21:00:41

标签: c++ pointers pass-by-reference

当我不能通过引用传递参数时,你能给我一个例子,我需要使用指针。我找到了一个例子,但我不确定。

假设您有一个从基类D派生的类B。如果你想这样做,你需要指针:

void function(B* b){...}
int main{
  D* d;
  function(d);
}

8 个答案:

答案 0 :(得分:6)

如果通过传递空指针允许“无参数”的概念,那么你不能使用引用并且必须使用指针的唯一时间。

但是,当您实际存储指向传递的内容的指针时,您可能希望将指针用作参数。大多数C ++开发人员会注意到您没有使用引用,并特别注意您的文档所说的内容。

答案 1 :(得分:6)

如果存在使用指针参数的编码指南(如Google),那就是你所做的。

否则,只在

时用指针形式参数声明自己的函数
  • nullpointer是一个有效的&有意义的实际论证,或

  • 实际参数最自然是指针,或

  • 你要将指针存放在某处。

可能更多的情况,但我认为你得到了漂移:当你有一个选择(没有编码指南另有说法)时,更喜欢参考。

干杯&第h。,

答案 2 :(得分:1)

另一种情况:如果您传递的内容是varargs之前的最后一个参数:

void fn1(A &a, ...); // Uh oh
void fn2(A *a, ...); // Good

我不知道这是否是标准所要求的,或者只是我使用的C ++编译器实现中的一个错误。

答案 3 :(得分:1)

通常,您可以将指针用于以下两种方法之一:

  • 重新分配 - 你无法重新绑定 参考
  • 空指针 - 没有这样的指针 作为空引用的东西。

如果您的预期用例不需要这两个属性中的任何一个,请使用引用。否则,使用指针。

答案 4 :(得分:0)

如果你想允许缺少一个对象,你需要使用指针:

// This allows DoSomething to receive pointers to NULL, which cannot
// be done with references
void DoSomething(Something *pSomething)
{
  if (pSomething)
  {
    ...
  }
}

int main()
{
  Something *pSomething=NULL;

  DoSomething(pSomething);
}

答案 5 :(得分:0)

http://www.daniweb.com/forums/thread216353.html

单链表示例是指针,指针指针用作函数参数。

答案 6 :(得分:-1)

唯一的原因是你需要传递null。你想把这个函数称为'我没有其中一个'

答案 7 :(得分:-2)

我认为如果你想传递一个函数,你必须通过指针传递它。我看不出你如何通过引用传递函数。

例如,请执行以下功能:

#include <iostream>
#include "math.h"

void myfun (double value, size_t nofloops, double (*function)(double))
   {
   std::cout << value << std::endl;
   for (size_t i=0;i<nofloops;++i)
      {
      value = function(value);
      std::cout << value << std::endl;
      }
   std::cout << "------------------" << std::endl;
   }

void main()
   {
   myfun(100,10,sin);
   myfun(100,10,cos);
   myfun(100,10,sqrt);
   }

这个小实用程序中的函数多次执行给定函数,在下一次迭代中将结果作为输入。我看不出你如何通过引用传递函数。