
C++指针与引用之间的区别
在C++中,指针是用来保存另一个变量的内存地址的。它就像普通的变量一样保存数据,但指针用来保存地址。C++中的指针是由程序员使用(*)操作符来取消引用的。它与int、float等类型相关,并在使用前用(*)操作符在其名称前声明。引用与指针类似。它基本上是给持有一个值的变量的一个别名。它被用来指代被分配给它的变量。在C++中的引用是在引用变量名称前使用(&)操作符来声明的。在C++中,引用变量是通过存储变量的地址来实现的。在本专题中,我们将学习C++指针与引用。
C++指针与引用之间的头对头比较(信息图)
下面是C++指针与引用之间的主要区别

C++指针与引用之间的关键区别
下面给出了C++指针与引用之间的一些关键区别。
- 指针变量可以同时被初始化和声明,或者初始化可以在之后进行。比如说。
int *ptr;
int a =10;
ptr = &a;
或
int a = 10;
int *ptr = &a;
而在引用的情况下,引用变量只需要在声明时进行初始化。
比如说
int a= 10;
int &ref_var = a;
- 指针变量与*和->等操作符一起使用,而引用变量则与&操作符一起使用。指针变量可以被递增和递减=,这意味着在指针的情况下算术运算是成功的。将指针的值增加1意味着指针将开始指向同一基本类型的下一个内存地址。在引用的情况下,算术操作是不成功的;如果程序员试图这样做,编译器会抛出一个错误。
- 指针的理解相对来说比较复杂。尽管它们非常强大,许多任务,如算术运算、指向不同的内存位置和对其进行更改,在指针的情况下都是可能的,但与此同时,它们也很难理解,特别是对于新手来说。不正确地使用它们会使代码变得难以管理,并可能导致许多意想不到的结果,而引用则很容易理解,在使用它们时出现问题的机会较少。
- 参考变量在编程中的基本用法是在函数和其返回类型中。当变量在函数中作为正式参数被传递时,在函数中对该变量所做的任何改变(尽管它也可以作为值传递)都是在原始变量中完成的,而不是在该变量的副本中。通过引用所做的改变一直保留到程序结束,而不是在函数的范围内,而指针则特别用于数组、链接列表、数据结构中需要存储变量的内存地址的情况,其值也可以是NULL。
- 解除引用操作符(*)用于解除引用或获取持有地址的指针变量的值。为了分配地址,在指针中使用(&)运算符。
比如说
int a= 34;
int *ptr = &a; // explicit referencing of address
cout << *ptr << endl; // explicit dereferencing the pointer ‘ptr’
cout << &ptr << endl;
而在引用的情况下,解除引用和参考是隐式完成的,不需要使用操作符。举例来说。
int &ref_var = a; //implicit referencing of variable ‘a’
ref_var = 34; // implicit dereferencing
cout << ref_var << endl;
C++指针与引用的比较表
下面给出了C++指针和引用之间的比较。
| S.No. | 指针 | 参照 |
| 1. | 在C++中指针可以被分配到NULL值。 | 在C++中的引用永远不能是NULL,否则会产生一个异常。 |
| 2. | 在指针的情况下,要取消对一个变量的引用,需要使用(*)操作符。 | 不需要引用变量;在C++中引用的情况下,只需使用变量的名字。 |
| 3. | 3. 指针允许多级转接,这意味着指针到指针的分配和定位是可能的。 比如说 int *ptr。 int **ptr1。 int x= 10。 int y= 20。 ptr = &x; ptr1 = &ptr。 | 在引用的情况下,不可能有多层次的间接性。在引用中只有一个级别是适用的。在C++的引用中实现多级,会给用户带来一个编译器错误。 比如说 int a = 13; int &ref = a; int &&ref1 = ref。 |
| 4. | 一个指针可以被重新赋值,指向另一个变量。但该变量需要是同一类型的变量。 比如说 int *p。 Int x, y; p = &x。 p = &y。 | 一旦变量被引用变量引用,它就不能被重新分配来引用另一个变量。 |
| 5. | 在C++中,所有的算术运算,如加法、减法、增法等,都可以在指针的情况下进行。这就是所谓的指针算术。 比如说 int arr [5] = {10, 20, 30, 40, 50}; int p = arr; for (int i =0; i<5; i++) { cout << *p << endl; p++; } | 在引用的情况下,算术运算是不可能的。在C++中,当它试图这样做的时候会抛出一个编译器时间错误。 比如说 int x = 10; int &ref = x; cout << ref++ << endl; |
| 6. | 在C++程序中声明指针时,在指针名称前使用(*)运算符。 比如说 int *ptr。 | 在引用的情况下,在引用变量前使用(&)运算符来声明引用变量,它代表地址。 比如说 Int a= 10; int &ref = a; |
| 7. | 指针变量返回它所指向的地址的值。可以用(*)运算符检索值。 | 引用变量返回它所引用的地址的地址。该地址可以用(&)运算符来检索。 |
| 8. | 8.C++中的指针变量在计算机内存中有自己的地址,而且它还在堆栈中占有空间。 | 引用变量没有自己的内存地址,相反,它只指向该变量,并与原始变量共享相同的地址。 |
总结
上面的描述清楚地解释了什么是C++中的指针和引用,以及它们之间的主要区别是什么。指针和引用几乎是一样的,都是通过持有或指向内存位置的地址来引用另一个变量的设施。因此,在程序中使用指针和引用之前,需要对它们有清晰的概念。