在理解双指针概念及其应该使用的地方时,我有一个疑问。我已经尝试过这段代码,发现我可以使用指针传递而不是双指针。
#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;
}
使用双指针代替参考的好处是什么?应该使用哪个东西
答案 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)
一方面没有任何好处。它们都满足完全相同的需求。所以最终归结为偏好。
有些人认为引用指针比指针指针更安全。