C++中参数传递的方式有三种:传值,传引用和传指针。
其实后两种方式是相似的,被作为参数传递的变量的内容都可能会发生变化。
但他们之间也是有明显的区别的:
1.引用在创建时必须要进行初始化(必须引用有效对象),而指针可以在定义后的
任何地方重新赋值。
2.不存在空引用(NULL),要关联到合法的存储空间。而指针可以置为NULL。
3.引用一旦被初始化到引用某个对象,它就不能被改变到引用另外一个对象;而给引用赋值并不会改变它与院士对象的绑定关系。
除了指针常量,指针在在任何时候可以可以指向另一个对象。
总的来说,引用和指针的效率都比较高,引用也具备更高的安全性。
引用别的资料:
①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。
② 从内存分配上看,程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。引用不能指向空值。
③ 从编译上看,程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针。
④不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。
⑤理论上,对于指针的级数没有限制,但是引用只能是一级。如下:
int** p1; // 合法。指向指针的指针
int*& p2; // 合法。指向指针的引用
int&* p3; // 非法。指向引用的指针是非法的
int&& p4; // 非法。指向引用的引用是非法的
注意上述读法是从左到右。
详细参考资料:
[url]http://patmusing.blog.163.com/blog/static/135834960200911308413342/ [/url]
分享到:
相关推荐
在 C++ 编程语言中,指针和引用是两个常用的概念,但是初学者容易混淆它们二者之间的区别。在本文中,我们将从概念、函数参数传递和编译角度来阐述指针和引用的区别。 概念上,指针是一个变量,它存放的是变量的...
C++ 中指针和引用有什么区别详解 1.从内存上来讲 系统为指针分寸内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内容空间。 2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,...
C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量...
C++中指针和引用的区别详解 pointer和reference是C++中两个重要的概念,许多开发者对其区别不甚了解,导致编写的代码出现BUG,或者出现不必要的性能损失。下面,我们将详细介绍pointer和reference的区别。 1. ...
在C++编程语言中,指针和引用是两种非常重要的概念,它们都涉及到变量的间接访问,但在实际使用中有着显著的区别。以下是关于指针和引用的详细分析: 1. **概念上的区别** - **指针**:指针是一个变量,它存储的是...
在编程世界里,C 和 C++ 语言中的指针是一个至关重要的概念,它们为程序员提供了直接访问内存的能力,使得高效编程成为可能。本篇将详细阐述指针的相关知识点,包括其定义、用法、操作以及常见陷阱。 首先,我们要...
在C++编程语言中,指针和引用都是用来间接访问内存中对象的重要工具...理解并熟练掌握指针和引用的区别,有助于写出更加清晰、健壮的C++代码。在编程实践中,根据场景合理选择使用它们,可以提高程序的可读性和维护性。
本文将深入探讨DEVC++中关于指针的所有集合,包括指针的基本概念、声明、赋值、运算以及在数组、函数和动态内存分配中的应用。 1. **指针基础** - **定义**:指针是一个变量,其值为另一个变量的内存地址。在DEV...
C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. ...
在C++编程语言中,指针和引用是两种重要的概念,它们都允许程序员间接访问和操作内存中的对象。虽然它们在形式和用途上有相似之处,但具有本质的区别。 首先,让我们了解一下指针。指针是一个变量,它存储了一个...