双指针vs通过引用指针传递

时间:2016-05-02 06:51:02

标签: c++ pointers

在理解双指针概念及其应该使用的地方时,我有一个疑问。我已经尝试过这段代码,发现我可以使用指针传递而不是双指针。

#include<iostream>
using namespace std;
void modify_by_value(int* );
void modify_by_refrence(int* &);
int a=4, b=5;
void main()
{

    int *ptr = NULL;
    ptr = &a;       
    cout << "*ptr before modifying by value: " << *ptr << endl; 
    modify_by_value(ptr);
    cout << "*ptr after modifying by value: " << *ptr << endl;
    cout << "*ptr before modifying by refrence: " << *ptr << endl;
    modify_by_refrence(ptr);
    cout << "*ptr after modifying by refrence: " << *ptr << endl;

}
void modify_by_value(int* ptr)      //this function can change *ptr but not the ptr(address contained) itself;
{
    ptr = &b;                       
}
void modify_by_refrence(int * &ptr) //this function has refrence and hence can modify the pointer;
{
    ptr = &b;
}

使用双指针代替参考的好处是什么?应该使用哪个东西

4 个答案:

答案 0 :(得分:4)

&#34;为什么使用对指针的引用而不是指向指针的指针&#34;?您将获得相同的答案,就好像在询问&#34;为什么使用指针代替参考&#34;对于任何其他类型的变量...

基本上:

  • 引用(指针或任何其他变量)很聪明,因为后面应该总是有一个对象

  • 指针(指针或任何其他变量)很聪明,因为它们可能是NULL(可选)

  • 引用(指针或任何其他变量)在C

  • 中不可用
  • 引用(指针或任何其他变量)是智能的,因为它们可以用作对象(不需要像指针那样解除引用,更容易语法,rading)

  • 等...

已经有很多帖子回答了这个问题:

What are the differences between a pointer variable and a reference variable in C++?

Are there benefits of passing by pointer over passing by reference in C++?

答案 1 :(得分:1)

在这种情况下,双指针习语是C继承。 C没有引用的概念(并且仍然没有),因此修改指针的唯一方法是将指针传递给指针。

但是当C ++提供引用时,你应该在只需要更改函数中的变量时使用它们,无论是否为指针,因为它允许代码更清楚程序员的意图。

如果要将空值用作特殊情况(引用永远不能指向为null),则超出规则的例外

答案 2 :(得分:0)

“指针指针”的成语可以追溯到C,这是必要的。 C没有参考。你可以怀疑它在C ++中是不需要的。

(“双指针”也可能指代double*,BTW,指针指针不是那么模糊)

答案 3 :(得分:0)

一方面没有任何好处。它们都满足完全相同的需求。所以最终归结为偏好。

有些人认为引用指针比指针指针更安全。