Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;引用/指针_C++_Pointers_Reference - Fatal编程技术网

C++ c++;引用/指针

C++ c++;引用/指针,c++,pointers,reference,C++,Pointers,Reference,可能重复: 前几天我看到了这个简单的代码,我认为自己是一个初学者,虽然我有大约一年半的C++经验。无论如何 两者之间有什么区别 int a = 0; int &b = a; 及 很明显,p持有a的地址,但是b是a的引用,这意味着我可以用b改变a的值。但我也可以用p做同样的事情。那么优势和劣势是什么呢 必须始终初始化引用 引用不能为null 初始化后,引用不能更改为其他对象的别名 我认为这取决于您计划如何在程序中使用这些变量。这两个语句似乎做了相同的事情(在这个有限的范围内) 第

可能重复:

前几天我看到了这个简单的代码,我认为自己是一个初学者,虽然我有大约一年半的C++经验。无论如何

两者之间有什么区别

int a = 0; 
int &b = a; 

很明显,p持有a的地址,但是b是a的引用,这意味着我可以用b改变a的值。但我也可以用p做同样的事情。那么优势和劣势是什么呢

  • 必须始终初始化引用
  • 引用不能为null
  • 初始化后,引用不能更改为其他对象的别名

我认为这取决于您计划如何在程序中使用这些变量。这两个语句似乎做了相同的事情(在这个有限的范围内)


第一种方法(在我看来)似乎是糟糕的编程实践,因为在程序的后期,改变b的值也会改变a的值可能并不明显。在第二种情况下,至少我们知道p是一个指针,因此您应该预料到更改它所指向的值所带来的副作用。

引用可以为null。int*a=0;int&b=*a;如果这样说,引用也可以引用无效对象。但是不能初始化int&b=NULL@Benoit:引用不能为空。8.3.2/4:“引用应初始化为引用有效的对象或函数。[…]定义良好的程序中不能存在空引用”
int a = 0
int *p = &a;