指针和参考

Anonim

指针和引用都是C和C ++中最强大的功能,它允许程序员直接操作内存地址以实现高效的内存管理。

两者都是用于间接引用其他对象的变量,它们在表面上共享一些共同的特征。虽然它们共享许多共同的功能,但它们也很难理解。

指针是保存另一个变量的内存地址的变量,而引用就像一个可以用来间接引用另一个变量的指针。

大多数程序员似乎对何时使用指针以及何时使用引用有了一些了解,但是他们经常遇到问题,其解决方案似乎不清楚。

因此,为了更好地理解这一理念,让我们理解两者之间的区别。

什么是指针?

每个变量都是一个由其地址定义的内存位置,并与一个标识符配对,该标识符包含一些可能在程序过程中被更改的值。简单来说,变量是表示数量的符号。

指针是包含另一个变量的内存地址的变量。指针只是一个地址,存储指针的变量称为指针变量。

其思想是使用标识符(或名称)而不是数字地址来减轻编程负担,从而降低程序的复杂性。由于这些地址指的是计算机存储器中的实际位置,因此指针可用于访问和操纵存储在存储器中的内容。

与任何变量或常量一样,必须为其类型声明指针。由于指针包含属于单独数据类型的内存地址,因此必须先使用指针声明它们,然后才能使用它们。指针声明的一般形式是:

Data_type * var-name;

这里,“Data_type”是指针的基本类型,“var-name”是指针变量。这里的星号(*)用于声明指针,该指针将变量“var-name”指定为指针变量。

int * p; //整数指针

float * x; //浮点指针

这里,变量“p”指向一个整数数据类型,它被声明为“int”,它指的是变量的数据类型。类似地,在第二个例子中,“float”指的是变量“x”的数据类型,它实际上被指定为指向浮点变量的指针。

什么是参考?

引用就像一个间接访问变量的指针。它就像是另一个变量的别名,这意味着它只是已有变量的另一个名称。

它允许程序员为变量创建第二个名称,以便操作存储在该变量中的内容。它是一个实体,是另一个变量的别名,它与原始变量具有相同的地址。它支持pass-by-reference作为函数形式参数,一旦定义它来引用变量,它就不能重新定位,这意味着它不能被引用到另一个变量。

与指针不同,它们不需要解引用运算符来访问该值;实际上,它们可以像普通变量一样使用。

int i;

int&ri = i;

这里,“ri”是初始化为“i”的整数参考。它将“ri”声明为“引用int”类型的对象。引用很容易与作为独立变量的指针混淆,其地址值一旦创建就不能重新分配。

指针和参考之间的区别

  1. 指针和参考的基础知识

- 两者在可用性方面提供几乎相似的功能,区别可能很棘手。指针只是一个存储另一个变量的内存地址的变量,而引用就像是已存在变量的别名。它为变量创建了第二个名称,可用于修改存储在该变量中的内容。

  1. 指针和参考声明

- 指针就像存储一段数据的任何其他变量一样。与其他变量不同,指针变量存储内存地址而不是值。使用间接运算符*取消引用指针以访问它指向的变量的内存位置。另一方面,引用不需要任何解除引用操作符来访问该值。

  1. 重新指定指针和引用

- 与可以随时初始化的指针不同,必须在初始化时分配引用。指针可以直接访问,而引用不能直接访问。

  1. 指针和引用的内存地址

- 指针变量在内存中有自己的位置,这意味着在声明指针时,指定一个位置,该位置是分配给每个内存单元的内存地址。指针变量与存储在内存中的地址相同。另一方面,引用变量是另一个变量的别名,从而获取引用变量的地址。

  1. 指针和引用的NULL值

- NULL表示列表的结尾,这表示它表示值未知,并指定该变量没有有效的地址空间。可以直接将NULL值分配给指针变量,这表示它不指向任何位置,而NULL不能分配给引用变量。

指针与参考:比较图表

指针与参考的总结

在参考图片之前,指针一直是讨论C / C ++程序员最喜欢的主题之一。参考文献有点类似于指针,但相比之下,它们的优缺点相当。虽然两者都可用于在另一个函数中更改一个函数的局部变量,但它们之间存在差异。两者都是C和C ++中的强大功能,允许您直接操作内存,但有一些例外。指针保存变量的内存地址,而引用只是另一个变量的别名。