gpt4 book ai didi

go - '*' 和 '&' 是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 13:09:34 41 4
gpt4 key购买 nike

我正在做 http://tour.golang.org/ .谁能向我解释一下这个函数第 1、3、5 和 7 行,尤其是 '*' 和 '&' 的作用?通过在函数声明中提及它们,它们应该/期望做什么?一个玩具例子:

    1: func intial1(var1 int, var2 int, func1.newfunc[]) *callproperfunction {
2:
3: addition:= make ([] add1, var1)
4: for i:=1;i<var2;i++ {
5: var2 [i] = *addtother (randomstring(lengthofcurrent))
6: }
7: return &callproperfunction {var1 int, var2 int, func1.newfunc[], jackpot}
8: }

它们似乎是我们在 C++ 中的指针。但我无法将这些概念与我们这里的概念联系起来。换句话说,当我在 Go 的函数声明中使用 '*' 和 '&' 时会做什么。

我知道引用和取消引用是什么意思。我不明白我们如何在 Go 中使用指向函数的指针?例如第 1 行和第 7 行,这两行是做什么的?声明了名为 intial1 的函数返回一个指针?在第 7 行,我们使用 return 函数带参数调用它。

最佳答案

这可能是 Go 中最令人困惑的事情之一。基本上有3种情况你需要了解:

& 运算符

& 在你想获取变量的内存地址时放在变量的前面。

* 运算符

* 放在一个保存内存地址并解析它的变量前面(因此它是 & 运算符的对应物)。它去获取指针指向的东西,例如*myString.

myString := "Hi"
fmt.Println(*&myString) // prints "Hi"

或者更有用的是,类似

myStructPointer = &myStruct
// ...
(*myStructPointer).someAttribute = "New Value"

* 在 Type 前面

* 放在 type 前面时,例如*string,它成为类型声明的一部分,所以你可以说“这个变量持有一个指向字符串的指针”。例如:

var str_pointer *string

所以令人困惑的是 * 真的被用于两个独立的(尽管相关的)事物。星号可以是运算符类型的一部分。

关于go - '*' 和 '&' 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38172661/

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