gpt4 book ai didi

c# - C# 引用和指针有什么区别?

转载 作者:IT王子 更新时间:2023-10-29 03:40:15 24 4
gpt4 key购买 nike

我不太明白 C# 引用和指针之间的区别。他们都指向内存中的一个地方,不是吗?我能弄清楚的唯一区别是指针没有那么聪明,不能指向堆上的任何东西,免于垃圾收集,并且只能引用结构或基类型。

我问的一个原因是,人们认为人们需要很好地理解指针(我猜是从 C 语言)才能成为一名优秀的程序员。很多学习高级语言的人都忽略了这一点,因此有这个弱点。

我只是不明白指针有什么复杂的地方?它基本上只是对内存中某个位置的引用,不是吗?它可以返回它的位置并直接与该位置的对象交互吗?

我是否错过了重要的一点?

最佳答案

指针和引用之间有细微但极其重要的区别。指针指向内存中的某个位置,而引用指向内存中的对象。指针不是“类型安全”的,因为您不能保证它们指向的内存的正确性。

以下面的代码为例

int* p1 = GetAPointer();

从 GetAPointer 必须返回与 int* 兼容的类型的意义上说,这是类型安全的。然而仍然不能保证 *p1 实际上会指向一个 int。它可以是一个 char、double 或只是一个指向随机内存的指针。

然而,引用指向特定对象。对象可以在内存中移动,但引用不能失效(除非你使用不安全的代码)。在这方面,引用比指针安全得多。

string str = GetAString();

在这种情况下,str 具有两种状态之一:1) 它没有指向任何对象,因此为 null 或 2) 它指向一个有效的字符串。而已。 CLR 保证是这种情况。它不能也不会用于指针。

关于c# - C# 引用和指针有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/430112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com