指向Golang中的结构体

huangapple go评论77阅读模式
英文:

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.

huangapple
  • 本文由 发表于 2012年10月17日 17:51:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/12931605.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定