C++中的指针与C#中的引用类型之间的区别

Fir*_*roz 7 c# c++ pointers reference

在C++中,指针是指向存储另一个变量的内存地址的指针,而在C#中,引用是一些相同的指针.这两者有什么区别?

Dar*_*rov 9

在C#中,引用类型将在不再需要时自动进行垃圾回收.


Jor*_*oba 9

对我来说,这个概念是相同的,或者至少是相同的,但实际使用的却不是.

当我们谈论指针或参考时,我们正在谈论一个概念.这个变量"指向"或者它是对其他东西的"引用",这些东西存储在其他地方.

如果我使用该引用,例如通过更新值,我实际上更新引用的对象,变量指向的对象.如果我有一个从两个不同位置引用的对象,我实际上是从两个地方更新相同的东西.

因此,这个概念可以与你在现实世界中的地址相关,只是一种引用其他东西的方式,并且可以像许多拥有我地址的人一样共享该引用.

不同之处在于如何使用它以及语言允许的内容.请注意,引用或指针的实现细节不是隐含在概念本身中.在C#中继续如此.

引用是一个引用,因此,将两个引用相加或者将一个引用添加到引用中是没有意义的......这甚至意味着什么?我无法添加两个家庭住址(如Baker Street + Home Street)......

在C++中,引用的实现细节实际上是引用.这样一个指针不仅仅是一个指针,它也是(并用作)一个内存地址.这样,例如,您可以添加指针,因为添加两个内存地址以获取另一个内存地址或添加4到内存地址实际上是有意义的.因此,在C++中,指针停止成为一个概念,成为一个实际实现细节的名称.

这就是为什么在C#中,指针和引用是不同的东西.因为从语义上来说,它们的含义非常相似,所以他们希望区别于旧的C和C++概念,其中指针变得与内存地址相同.

我建议你阅读Eric Lippert的文章" 引用不是地址 " ,我相信他在解释这些差异方面做得很好.

  • 你绝对不能在C++中添加两个指针. (3认同)