kam*_*lot 2 c++ pointers reference function pass-by-reference
可能重复:
C++中指针变量和引用变量之间的差异
假设我正在尝试将对象x的引用传递给c ++函数...
有什么区别
pass(Object * x){
}
Run Code Online (Sandbox Code Playgroud)
和
pass(Object& x){
}
Run Code Online (Sandbox Code Playgroud)
当使用不同的方法声明指针/引用时,您将如何访问实际对象本身...
例如,如果我有Object*x,我将如何实际访问x引用的实际对象
与Object&x相同
Eti*_*tel 11
第一个是指针传递.第二个是参考传递.
至于用法,必须先将指针"解除引用"才能使用它.这是由*
和->
运营商完成的:
void do_something(Object * x)
{
Object & ref = *x; // * returns a reference
ref.method();
x->method(); // same as (*x).method()
}
Run Code Online (Sandbox Code Playgroud)
参考文献没有这样的限制:
void do_something(Object & x)
{
x.method();
}
Run Code Online (Sandbox Code Playgroud)
但是,引用只能在整个生命周期内指向一个对象,而指针可以改变目标,并且(如下面提到的John)指向"nothing"(即NULL
,0
或者,在C++ 0x中nullptr
).NULL
在C++中没有引用这样的东西.
由于引用更容易使用且不易出错,所以除非你知道自己在做什么,否则更喜欢它们(指针是一个相当棘手的主题).