指针和引用之间的真正区别是什么?

6 浏览
0 Comments

指针和引用之间的真正区别是什么?

为什么这么迷恋指针?

作为只用过现代面向对象语言如ActionScript、Java和C#的人,我实在不太理解指针的重要性以及其用途。我在这方面错过了什么?

0
0 Comments

指针和引用之间的真正区别是什么?

指针用于直接操作内存的内容。

这取决于你是否认为这样做是一件好事,但这是C语言或汇编语言中完成任何操作的基础。

高级语言在幕后隐藏了指针:例如,在几乎所有的Java虚拟机中,引用都是以指针的形式实现的,这就是为什么它被称为NullPointerException而不是NullReferenceException。但它不允许程序员直接访问它所指向的内存地址,也不能被修改为除了正确类型的对象地址之外的值。因此,它没有提供与低级语言中的指针相同的权力(和责任)。

伟大的回答:给予了C语言等低级语言和高级语言相同的尊重!

0
0 Comments

指针和引用之间的真正区别是什么?

指针和引用都是间接性的概念,它们不直接处理数据,而是指向数据的位置。在Java和C#中,也有类似的概念,但只以引用的形式存在。

关键的区别在于,引用是一种不可变的标志,它始终指向某个对象。这是有用的,也容易理解,但比C指针模型的灵活性要低。C指针是可以随意改写的标志。你知道你要找的字符串就在被指向的字符串旁边?那么只需稍微修改一下标志。

这种灵活性与C的“接近底层,需要具备低级知识”的方式很搭配。我们知道char* foo由一组从foo标志指向的位置开始的字符组成。如果我们还知道该字符串至少有10个字符长,我们可以将标志改为(foo + 5),以指向相同的字符串,但是从中间开始。

这种灵活性在你知道自己在做什么时很有用,而在不知道的情况下则是致命的(这里的“知道”不仅仅是指“了解语言”,而是“了解程序的准确状态”)。如果搞错了,你的标志就会指向悬崖边缘。引用不允许你进行修改,所以你更有信心可以安全地跟随它们(尤其是与“引用对象永远不会消失”的规则相结合,就像大多数垃圾回收语言中那样)。

Java和C#中的引用不像C++中的引用那样不可变...它们可以被改变以引用其他对象,并且可以接受空值,而在C++中是无法做到的...有点像C++引用和指针的混合(它们是由垃圾回收机制管理的)。

这个解释措辞精辟!喜欢关于指向悬崖的例子 🙂

我认为指针直接指向计算机的内存,而引用是其他变量的别名。如果你有一个int类型的变量,并给它两个名称,那就相当于一个引用。如果你有一个int类型的变量,并记录它在内存中的位置,那就是一个指针。

“直接指向悬崖”这样说得很好!

这个解释就像吃了蓝色药丸一样,谢谢!

0
0 Comments

指针和引用之间的真正区别是什么?这个问题的出现是因为了解计算机在较低层面上的工作原理在许多情况下非常有用。C语言和汇编语言可以帮助你做到这一点。

基本上,指针允许你将数据写入计算机内存的任何位置。在更原始的硬件/操作系统或嵌入式系统中,这实际上可能会产生一些有用的效果。比如说打开和关闭闪烁灯。

当然,在现代系统中,这种方法行不通。操作系统是内存的主宰和掌控者。如果你尝试访问错误的内存位置,你的进程将因为傲慢而丧命。

在C语言中,指针是传递数据引用的方式。当你调用一个函数时,你不想将一百万个位拷贝到堆栈中。相反,你只需告诉函数数据在内存中的位置。换句话说,你给出了数据的指针。

在某种程度上,即使在Java中,也是这样。你传递对象的引用,而不是对象本身。记住,最终每个对象都是计算机内存中一组位。

我完全同意你的评论:"你错过了很多东西"!

0