Go 语言的 取地址符是 &
,放到一个变量前使用就会返回相应变量的内存地址
。
Go语言的 指针变量是 *
,放在一个变量前使用就代表地址值
。
func main() {
var a int = 4
var ptr *int
ptr = &a
println("a的值为", a); // 4
println("*ptr为", *ptr); // 4
println("ptr为", ptr); // 824633794744
}
// eg:如上定义了一个ptr的指针变量,在输入*ptr时,代表输去它的地址值,而ptr输出的是他的内存地址(因为指针就是指向变量的内存地址
&
符号的意思是对变量取地址
*
符号的意思是对指针取值
示例:
type StructA struct {
ID int
}
func main () {
sliceA := []StructA{
{
1}, {
2}, {
3}, {
4}}
for _, a := range sliceA {
a.ID += 1
fmt.Println("a:", a)
}
fmt.Println("sliceA:", sliceA)
for _, a := range sliceA {
fmt.Printf("%d,", a.ID)
}
}
// 输出结果:
a: {
2}
a: {
3}
a: {
4}
a: {
5}
sliceA: [{
1} {
2} {
3} {
4}]
1,2,3,4,
---------------------------------------------------------------------
func main () {
sliceB := []*StructA{
}
for _, a := range sliceA {
fmt.Println("a:", &a)
sliceB = append(sliceB, &a)
}
fmt.Println("sliceB:", sliceB)
for _, b := range sliceB {
fmt.Printf("%d,", b.ID)
}
}
// 输出结果:
a: &{
1}
a: &{
2}
a: &{
3}
a: &{
4}
sliceB: [0xc0000a46d0 0xc0000a46d0 0xc0000a46d0 0xc0000a46d0]
4,4,4,4,