英文:
Point to Struct in Golang
问题
我在实现以下代码时遇到了错误:
package main
import (
"fmt"
)
type Struct struct {
a int
b int
}
func Modifier(ptr *Struct, ptrInt *int) int {
*ptr.a++
*ptr.b++
*ptrInt++
return *ptr.a + *ptr.b + *ptrInt
}
func main() {
structure := new(Struct)
i := 0
fmt.Println(Modifier(structure, &i))
}
这给了我一个关于“ptr.a的无效间接引用(类型为int)...”的错误。而且为什么编译器没有给我关于ptrInt的错误?提前谢谢。
英文:
I has encountered an error while implement the below code:
package main
import (
"fmt"
)
type Struct struct {
a int
b int
}
func Modifier(ptr *Struct, ptrInt *int) int {
*ptr.a++
*ptr.b++
*ptrInt++
return *ptr.a + *ptr.b + *ptrInt
}
func main() {
structure := new(Struct)
i := 0
fmt.Println(Modifier(structure, &i))
}
That gives me an error something about "invalid indirect of ptr.a (type int)...". And also why the compiler don't give me error about ptrInt? Thanks in advance.
答案1
得分: 13
只需执行
func Modifier(ptr *Struct, ptrInt *int) int {
ptr.a++
ptr.b++
*ptrInt++
return ptr.a + ptr.b + *ptrInt
}
实际上,你试图在 *(ptr.a)
上应用 ++
,而 ptr.a
是一个 int,不是指向 int 的指针。
你可以使用 (*ptr).a++
,但这不是必需的,因为 Go 会自动解析 ptr.a
,如果 ptr
是一个指针,这就是为什么在 Go 中不需要 ->
。
英文:
Just do
func Modifier(ptr *Struct, ptrInt *int) int {
ptr.a++
ptr.b++
*ptrInt++
return ptr.a + ptr.b + *ptrInt
}
You were in fact trying to apply ++
on *(ptr.a)
and ptr.a
is an int, not a pointer to an int.
You could have used (*ptr).a++
but this is not needed as Go automatically solves ptr.a
if ptr
is a pointer, that's why you don't have ->
in Go.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论