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

这实际上是一个普遍的问题,但现在我正在使用 Go 和 C#。假设我们想从用户在 Go 中的输入中分配一个变量:


func main() {

    var input float64

    fmt.Scan(&input)

}

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


var input = Convert.ToInt32(Console.ReadLine());

// and not &input ...


慕婉清6462132
浏览 179回答 2
2回答

慕无忌1623718

Java 和 C# 是高级语言,它们抽象了 C 等低级语言所需的大部分内存管理和其他特定事物。在这种情况下,该Console.ReadLine()函数分配内存来存储控制台输入并将其复制到input变量中。由于这些语言具有垃圾收集功能,分配和释放内存是自动完成的,因此该框架不需要您显式传递要写入的内存地址,并且不希望您在使用完内存后释放内存。

繁星coding

在 Go 中,与 C/C++ 一样,指针变量是通过引用传递类型的方式。Java 和 C# 等语言不鼓励使用指针变量。C# 具有用于通过引用传递值类型的“ref”关键字和“boxing”。有关“ref”的更多信息,请 参见此处:https : //msdn.microsoft.com/en-us/library/14akc2c7.aspx有关“拳击”的更多信息,请参见此处:https : //msdn.microsoft.com/en-us/图书馆/yz2be5wk.aspx
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go