指针与参考

新手上路,请多包涵

为函数提供要使用的原始变量时,有什么更好的做法:

 unsigned long x = 4;

void func1(unsigned long& val) {
     val = 5;
}
func1(x);

或者:

 void func2(unsigned long* val) {
     *val = 5;
}
func2(&x);

IOW:有什么理由选择一个而不是另一个吗?

原文由 Jack Reza 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 578
2 个回答

我的经验法则是:

如果您想对指针进行指针运算(例如,递增指针地址以逐步遍历数组)或者您必须传递一个 NULL 指针,请使用指针。

否则使用参考。

原文由 Nils Pipenbrinck 发布,翻译遵循 CC BY-SA 3.0 许可协议

指针

  • 指针是保存内存地址的变量。
  • 指针声明由基类型、\* 和变量名组成。
  • 指针可以指向生命周期内任意数量的变量
  • 当前未指向有效内存位置的指针被赋予值 null(为零)
   BaseType* ptrBaseType;
  BaseType objBaseType;
  ptrBaseType = &objBaseType;

  • & 是一个一元运算符,它返回其操作数的内存地址。

  • 解引用运算符 (*) 用于访问存储在指针指向的变量中的值。

      int nVar = 7;
     int* ptrVar = &nVar;
     int nVar2 = *ptrVar;

参考

  • 引用 (&) 类似于现有变量的别名。

  • 引用 (&) 类似于自动取消引用的常量指针。

  • 它通常用于函数参数列表和函数返回值。

  • 引用必须在创建时进行初始化。

  • 一旦一个引用被初始化为一个对象,就不能改变它来引用另一个对象。

  • 您不能有 NULL 引用。

  • 一个 const 引用可以引用一个 const int。它是使用具有 const 值的临时变量完成的

  int i = 3;    //integer declaration
  int * pi = &i;    //pi points to the integer i
  int& ri = i;    //ri is refers to integer i – creation of reference and initialization

在此处输入图像描述

在此处输入图像描述

原文由 Saurabh Raoot 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题