c# - 为什么我们需要指针来为 Go/C 中的变量赋值而不是 C#/Java

标签 c# pointers go

这实际上是一个一般性问题,但现在我正在使用 Go 和 C# 时出现了。 假设我们想根据用户在 Go 中的输入分配一个变量:

func main() {
    var input float64
    fmt.Scan(&input)
}

很清楚为什么我们需要一个内存位置来放入我们的新值。但是为什么在 Java 或 C# 等语言中,我们没有遵循相同的逻辑:

var input = Convert.ToInt32(Console.ReadLine());
// and not &input ...

最佳答案

Java 和 C# 是高级语言,它们抽象了大部分内存管理和 C 等低级语言所需的其他特定内容。

在这种情况下,Console.ReadLine() 函数分配内存来存储控制台输入并将其复制到 input 变量。

因为这些语言有垃圾收集,分配和释放内存是自动完成的,所以框架不需要你显式地传递一个内存地址来写入,也不期望你在完成后释放内存使用它。

编辑:

请参阅@kostix 评论以获得对此答案的重大改进。

关于c# - 为什么我们需要指针来为 Go/C 中的变量赋值而不是 C#/Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34517179/

相关文章:

c# - Task.Run 和 Task.Factory.StartNew 之间不同的异常处理

c# - Mailchimp 事件发送错误 - 此事件已发送,无法再次发送

c - 初始化包含指向数组的指针的结构

go - 在 goroutines 中调用 C.malloc/C.free 时的内存泄漏

c# - 获取 'excelcnv.exe' 位置

c - 在 C 中为非空 void* 指针赋值的正确方法应该是什么?

pointers - 派生类型(在 Fortran 中)占用多少字节?这些地点是连续的吗?以及指向派生类型的指针?

go - 如何成功获得链接断开的软件包?

file-upload - dart上传文件输入类型文件

c# - asp.net mvc文件下载名称编码