With a type:
type A struct {
B int, C *int
}
How do I initialise a pointer member to a non-zero value inline, without creating temporaries?
a := A{
B: 42,
C: ?,
}
For the specific example you've given you are limited in what you can do without introducing additional statements.
If you want C
to point at an initialised integer variable, you will need an additional statement to define that variable since you can't take the address of an integer literal (ie &42
would be an error).
If you just want to initialise C
as a pointer to a new zero value, you are in luck though and can set it to new(int)
.
If you were instead dealing with a different type that had an initialiser syntax, you would also been in luck. For example, if C
was a pointer to a structure, you could initialise it to &TheStruct{...}
.
If none of these are appropriate, and you are really only after code clarity for initialising *int
variables, a helper function might fit your requirements. For example:
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)
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.