指针(pointer)和参考(reference)的区别
在讨论指针和引用之间的区别之前,让我们先简单地看一下这两个术语的含义。在程序中,数据占用内存。为了访问数据,应该知道数据在执行时被放在内存中的确切位置。指针变量和引用变量用于访问这些数据并操作它们所在的内存地址。也就是说,指针和引用都可以用来间接引用对象。它们基本上把内存地址作为它们的值。指针和引用之间的关键区别在于指针是存储另一个变量内存位置地址的变量,而引用是引用另一个变量的变量。指针和引用这两种机制有不同的语法和用法。
什么是指针(a pointer)?
指针是一种编程语言对象,它将值的内存地址存储在计算内存中。
c++语法;
积分i=5;
int*ptr=&i;
第一行定义了一个值为5初始化的变量。第二行定义指向变量内存地址的指针。这里,“ptr”被声明为“pointer to int”类型的对象,其初始值是对象i的地址。实际上,ptr变量通过存储其内存地址指向i。
获取存储在内存位置的值称为取消引用。*运算符用于取消对指针的引用。引用表达式ptr之后的间接引用。
要改变i的值,可以使用以下赋值;
*ptr=20;
指针也可以重新分配以引用不同的对象。
空指针是一种特殊类型的指针。空指针通常用0或null表示,并且指向零。在一个很好的例子中,一个指针被分配给一个不被指定为空的指针。此赋值可用于逻辑操作和条件。
指针可用于存储和管理动态分配内存的地址。使用指针可以有效地实现和控制数据结构(如堆栈、队列和列表)。例如,队列可以有两个指针:头指针和尾指针。指针也可以用来按变量的地址传递变量,这样可以更改值。直接操作内存或内存映射设备也可以通过使用指针来处理。
指针允许对寻址内存进行受保护和无保护的访问。因此,必须采取必要的预防措施来验证指针的内容是否有效。否则,用无效的内存地址取消引用指针可能会导致程序崩溃。
指针在语言中支持,如C、C++、Pascal和许多汇编语言。
什么是参考文献(a reference)?
引用只是存储在内存中的值的替代标识符。它使程序能够间接地访问特定的数据。
c++语法;
积分i=5;
int&ref=i;
第一行定义了一个值为5初始化的变量。第二行将“ref”声明为引用i的“reference to int”类型的对象。如果引用被实现为存储在内存中的特定数据的物理地址,则引用不同于数据本身。
一旦定义了引用,就不能重新分配新值。引用总是引用初始化它的对象。在下面的赋值中,ref仍然引用i,但是值现在是20。
参考值=20;
根据上面的例子,取消引用引用不需要任何运算符。
当变量总是引用对象时,可以使用引用。这是因为,与指针不同,引用不能为null,并且必须始终在初始化时赋值。由于引用必须始终引用某个对象,因此将这样的变量作为引用可以确保程序能够高效、正确地工作。如果没有空引用,则不必测试引用变量的有效性。
引用变量可用于有效地将大数据作为参数传递给过程。引用还用于在不同代码区域之间共享大数据,因为每个代码都保留对数据的引用。
诸如C++、java、python、perl、php、Ruby等编程语言支持引用。
指针(pointer)和参考(reference)的区别
指针和引用的定义
指针:指针是存储在计算内存中的对象的内存地址。
引用:引用是对象的替代标识符或别名。
指针和引用的特性
宣言
指针:用*运算符声明指针。
引用:使用&运算符声明引用。
解引用
指针:指针变量需要取消对*运算符的引用。
引用:引用变量不需要取消引用运算符。
初始化
指针:指针可以初始化为null。这样的变量称为空指针。
引用:引用不能初始化为null。没有空引用。引用必须始终引用对象。
重新分配
指针:可以重新分配指针变量以引用不同的对象。
引用:不能重新分配引用变量。它总是引用初始化它的对象。
使用
指针:当不存在引用任何内容的可能性,或者需要在不同的时间引用不同的对象时,应该使用指针变量。
引用:当总是有一个对象要引用,并且不需要使用引用变量引用对象以外的任何对象时,应该使用引用变量。
用法的应用
指针和指针可以用来实现数据结构。
引用:引用变量可以用在函数参数中,返回类型定义有用的接口。
使用的语言:
指针:编程语言如C、C++、Pascal和许多汇编语言支持指针。
参考:编程语言如C++、java、python、perl、php、Ruby等支持参考。
Image Courtesy: “Pointers” by This file was made by User:SvenTranslation.Own work.This vector image was created with Inkscape.(CC BY-SA 3.0) via Comm*** –