指针和引用都是C语言和C++中最强大的功能,它们使程序员可以直接操纵内存地址以进行有效的内存管理。
两者都是用于间接引用其他对象的变量,它们在表面上具有一些共同的特征。尽管它们具有许多共同的功能,但它们的理解也非常复杂。
指针是一个变量,它保存另一个变量的内存地址,而引用就像一个指针,可用于间接引用另一个变量。
大多数程序员似乎对何时使用指针和何时使用引用有了一定的了解,但是他们经常遇到一些问题,解决方案似乎不清楚。
因此,为了更好地理解这一理念,让我们了解两者之间的区别。

什么是指针?

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

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

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

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

data_type * var-name;

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

int *p;                        // integer pointer
float *x;                    // float pointer

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

指针和引用

什么是引用?

引用就像一个可以间接访问变量的指针。 它就像是另一个变量的别名,意味着它只是一个已经存在的变量的别名。

它允许程序员为变量创建第二个名称,以便他们可以操纵该变量中存储的内容。 该实体是另一个变量的别名,并且与原始变量具有相同的地址。 它支持传递引用作为函数形式参数,并且一旦定义为引用变量,就无法重新定位,这意味着不能引用另一个变量。

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

int i;
int &ri = i;

在此,“ri”是初始化为“i”的整数引用。 它将“ri”声明为“对int的引用”类型的对象。引用很容易与独立变量的指针混淆,创建后就无法重新分配其地址值。

指针与引用的区别

1. 指针和引用的基础
就可用性而言,两者都提供了几乎相似的功能,并且区分起来很棘手。指针只是存储另一个变量的内存地址的变量,而引用就像是已经存在的变量的别名。它为变量创建了第二个名称,该名称可用于修改存储在该变量中的内容。

2. 指针和引用声明
指针就像存储数据的任何其他变量一样。与其他变量不同,指针变量存储内存地址而不是值。使用间接运算符*取消对指针的引用,以访问其指向的变量的内存位置。另一方面,引用不需要任何解引用运算符即可访问该值。

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

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

5. 指针和引用的NULL值
NULL表示列表的末尾,这表示它指示值未知,并且它指定变量没有有效的地址空间。可以将NULL值直接分配给指针变量,这表明它没有指向任何地方,而NULL则不能分配给引用变量。

总结

指针一直是C/C++程序员讨论中最喜欢的主题之一,直到引用出现。引用在某种程度上类似于指针,但在比较中却各有优缺点。 虽然两者都可以用来更改另一个函数中一个函数的局部变量,但是它们却有所不同。 两者都是C和C++的强大功能,可让您直接操作内存,但有一些例外。 指针保存一个变量的内存地址,而引用只是另一个变量的别名。

欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:指针和引用
本文链接:https://www.vsdiffer.com/vs/pointer-vs-reference.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。