`

C++中的 引用和指针区别

c++ 
阅读更多

 

引用是C++中的概念,初学者容易把引用和指针混淆一起。
一下程序中,n是m的一个引用(reference),m是被引用物(referent)。
int m;
int &n = m;
n相当于m的别名(绰号),对n的任何操作就是对m的操作。
所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。

引用的规则:

(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

以下示例程序中,k被初始化为i的引用。
语句k = j并不能将k修改成为j的引用,只是把k的值改变成为6。
由于k是i的引用,所以i的值也变成了6。
int i = 5;
int j = 6;
int &k = i;
k = j; // k和i的值都变成了6;

引用的主要功能是传递函数的参数和返回值。

C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

以下是"值传递"的示例程序。

由于Func1函数体内的x是外部变量n的一份拷贝,改变x的值不会影响n, 所以n的值仍然是0。
void Func1(int x)
{
x = x + 10;
}
...
int n = 0;
Func1(n);
cout << "n = " << n << endl; // n = 0

以下是"指针传递"的示例程序。

由于Func2函数体内的x是指向外部变量n的指针,改变该指针的内容将导致n的值改变,所以n的值成为10。
void Func2(int *x)
{
(* x) = (* x) + 10;
}
...
int n = 0;
Func2(&n);
cout << "n = " << n << endl; // n = 10

以下是"引用传递"的示例程序。

由于Func3函数体内的x是外部变量n的引用,x和n是同一个东西,改变x等于改变n,所以n的值成为10。
void Func3(int &x)
{
x = x + 10;
}
...
int n = 0;
Func3(n);
cout << "n = " << n << endl; // n = 10

对比上述三个示例程序,会发现"引用传递"的性质象"指针传递",而书写方式象"值传递"。

实际上"引用"可以做的任何事情"指针"也都能够做,为什么还要"引用"这东西?
答案是"用适当的工具做恰如其分的工作"。

指针能够毫无约束地操作内存中的任何东西,尽管指针功能强大,但是非常危险。

如果的确只需要借用一下某个对象的"别名",那么就用"引用",而不要用"指针",以免发生意外。

 

引用就是传递的原始变量,指针传递的是变量的地址,两者没什么关系,

引用主要用于函数参数的传递,相对于传值,可以节省内存空间,
指针可以直接传递变量地址,也可以可以节省内存空间,但是指针功能强大一些,可以在自由操作数组变量

分享到:
评论
1 楼 eric_weitm 2012-04-11  
在效率本身上而言,引用也有优势。另外,在编译器实现时,指针的传递实际上也是传值,只不过这个值是指针变量的值而不是一般变量的值,在操作数据时使用的指令不是直接寻址,而是间接寻址。编译器要实现引用,就要维护变量的作用域,即将某个变量符号映射成真正的被引用变量的地址,这样调用栈的栈帧中是不用分配实参的空间的。

相关推荐

    C++指针与引用的区别

    C++指针与引用的区别 指针和引用是C++语言中两种不同的概念,初学者容易把它们混淆一起。这两种概念都是地址的概念,但它们有很多不同的特点和应用场景。 相同点 1. 都是地址的概念;指针指向一块内存,它的内容...

    C++引用&和指针在作为形参时的区别

    在C++中,引用(reference)和指针都是用来间接访问其他对象的工具,但它们在使用和行为上有显著的差异。引用的概念是C++特有的,而指针在C和C++中都存在。理解这两种机制的区别对于编写高质量的C++代码至关重要。 ...

    C++引用和指针的区别,C++虚函数原理,C++面试经验

    "C++引用和指针的区别、C++虚函数原理、C++面试经验" C++ 引用和指针是两种不同的概念。虽然它们都可以用来表示内存地址,但是它们有着不同的特点和应用场景。 1. 相同点:引用和指针都是地址的概念,指针指向一块...

    C++重要的谨记指针和引用的区别

    在C++编程语言中,指针和引用是两种非常关键的概念,它们都允许我们间接访问内存中的对象。然而,它们之间存在着本质的区别,理解和掌握这些差异对于编写高效、安全的代码至关重要。 首先,指针是一个变量,它存储...

    c++中指针和引用的区别

    在 C++ 编程语言中,指针和引用是两个常用的概念,但是初学者容易混淆它们二者之间的区别。在本文中,我们将从概念、函数参数传递和编译角度来阐述指针和引用的区别。 概念上,指针是一个变量,它存放的是变量的...

    C++中句柄和指针的区别

    在C++编程中,句柄和指针是两种不同的数据访问机制,它们都在不同场景下用于访问和操作内存中的对象。尽管两者都能通过一个较小的数据值来引用或控制大量数据,但它们的本质和用途有所不同。 首先,句柄是一个抽象...

    c++指针和引用的使用浅谈

    我们可以使用`*`运算符来解引用指针,获取或修改它所指向的值。例如: ```cpp int x = 10; int *ptr = &x; // ptr 存储 x 的地址 *ptr = 20; // 通过指针修改 x 的值 ``` 指针有以下特点: 1. 可以被赋值为NULL,...

    C++指针与引用

    在C++中,指针和引用是两种非常重要的数据类型,它们都用于间接访问其他变量或对象。然而,它们之间存在显著的区别,了解这些差异对于有效、安全地使用C++语言至关重要。 - **指针**是一种变量,其值是内存地址。...

    C++中指针和引用的区别

    在C++编程语言中,指针和引用是两种非常重要的概念,它们都用来间接访问内存中的对象,但各自有着独特的特性和用途。了解并熟练掌握它们的区别对于编写高效、安全的代码至关重要。 首先,让我们来看指针。指针是C++...

    C++ 中引用与指针的区别实例详解

    C++ 中引用与指针的区别实例详解 引用是从C++才引入的,在C中不存在。为了搞清楚引用的概念,得先搞明白变量的定义及引用与变量的区别,变量的要素一共有两个:名称与空间。  引用不是变量,它仅仅是变量的别名,...

    c++中引用和指针的区别和联系

    C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. ...

    浅析C++中的引用与指针

    本文旨在深入剖析C++中的引用与指针,并通过具体的例子来对比和解释它们之间的区别与联系。 #### 一、引用与指针的基本概念 **1.1 引用** 引用本质上是已经存在的变量的别名。当声明一个引用时,它必须初始化为...

    指针传递和引用传递的区别

    在C++编程语言中,指针和引用是两种重要的概念,它们都涉及到对象的间接访问,但具有显著的差异。指针是一个独立的变量,存储的是另一个变量的地址,可以改变所指向的地址或地址中存储的数据。而引用则是一个别名,...

    c++高阶指针与引用的实例(有代码)

    在C++编程语言中,高阶指针和引用是两种重要的高级特性,它们极大地扩展了对内存和对象的操纵能力。本实验通过两个实例详细介绍了这两种概念及其在实际编程中的应用。 首先,我们来看第一个实例,它涉及到了二级...

    C++中的对象和引用

    详细的讲解了C++中的引用和函数的重载的知识,引用和指针的区别,引用的实质,以及在使用引用时的注意事项,以及常引用的用法。

    指针和引用的区别

    在计算机编程尤其是C++中,指针和引用是非常重要的概念。它们都是用来处理内存地址的重要工具,但两者之间存在本质的区别。本文将深入探讨指针和引用的区别,帮助读者更好地理解这两种工具的特性和应用场景。 #### ...

    c++指针和引用

    在C++编程语言中,指针和引用是两种非常重要的概念,它们允许程序员对内存进行直接操作,提高代码的灵活性和效率。对于初学者来说,理解并熟练掌握这两个概念至关重要。 首先,我们来探讨指针。指针在C++中扮演着...

    C++结构体参数与结构体指针参数区别Demo

    在C++编程中,结构体(struct)是一种用户自定义的数据类型,用于组合不同类型的数据成员。在函数调用时,我们可以...通过分析`helloworld.cpp`和运行`helloworld.exe`,你可以更深入地理解这两种方法在C++中的应用。

    C++ 解环引用智能指针

    4、 可以管理用new分配的内存块中的部分内存空间,即可以替代C++引用,并且保证内存正常释放,如: class A{}; class B{public: A a;}; shared_ptr&lt;B&gt; pb=new(ydsh,(B*)0) B; shared_ptr&lt;A&gt; pa=&pb-&gt;a; 5、 ...

    C++之数组与指针的异同 pdf

    在C++编程语言中,数组和指针是两种非常重要的数据结构,它们在内存管理和数据访问方面发挥着关键作用。然而,尽管它们在某些场景下可以互换使用,但它们之间存在着本质的区别,理解这些差异对于高效编程至关重要。 ...

Global site tag (gtag.js) - Google Analytics