使用类型:
type A struct {
B int, C *int
}
如何在内联函数中将指针成员初始化为非零值,而不创建临时对象?
a := A{
B: 42,
C: ?,
}
使用类型:
type A struct {
B int, C *int
}
如何在内联函数中将指针成员初始化为非零值,而不创建临时对象?
a := A{
B: 42,
C: ?,
}
对于您提供的具体示例,如果不引入其他语句,您的操作受到限制。
如果您希望让C
指向一个初始化的整数变量,您需要添加一条额外的语句来定义该变量,因为您无法获取整数文字的地址(即&42
会产生错误)。
如果您只想将C
初始化为指向新的零值的指针,则很幸运,可以将其设置为new(int)
。
如果您要处理的是具有初始化器语法的不同类型,则同样很幸运。例如,如果C
是指向结构体的指针,可以将其初始化为&TheStruct{...}
。
如果以上方法都不适用,并且您真正只想要清晰初始化*int
变量的代码,那么一个辅助函数可能符合您的要求。例如:
func makeIntPointer(v int) *int {
return &v
}
package main
import "fmt"
type A struct {
B int
C *int
}
func newint(i int) *int{
return &i
}
func main() {
c := newint(5)
a := &A{
B: 42,
C: c,
}
fmt.Printf(" %v" , *a.C)
fmt.Printf(" %#v" , a.C)
}
p := &([]int{42}[0])
将p
初始化为指向 42 的指针。更难以阅读的p := func(i int) *int {return &i}()
也可以使用(但你可以像 James Henstridge 建议的那样将其分解)。 - val