package main
import "fmt"
const MAX int = 3
func main() {
a := []int{10, 100, 200}
var ptr [MAX]*int
for i := 0; i < MAX; i++ {
ptr[i] = &a[i]
fmt.Printf("a[%d]的地址:%x\n", i, ptr[i])
}
for i := 0; i < MAX; i++ {
fmt.Printf("a[%d]的值是:%d\n", i, *ptr[i])
}
}
数组中通常多个值,所以指向数组的指针也会有多个值
ptr声明为一个指针数组,数组长度为MAX,因为ptr中的每个元素现在保存在一个指向int值的只指针,他们将存储在指针数组中
传递给函数,go语言允许传递指针到函数中,只需将函数的参数声明为指针类型。
package main
import "fmt"
func swap(x *int, y *int) {
var temp int
temp = *x //复制一份x
*x = *y //把y给x
*y = temp //把原来的x给y
}
func main() {
a := 100
b := 200
fmt.Printf("交换之前a的值为:%d\n", a)
fmt.Printf("交转之前b的值为:%d\n", b)
swap(&a, &b)
fmt.Printf("交换内存之后a的值:%d\n", a)
fmt.Printf("交换内存之后b的值:%d\n", b)
fmt.Println("$$$$$$$$$$$$$$$$$$$$$$$$$")
a, b = b, a
fmt.Println(a, b)
}
使用ptr交换,感觉直接交换来的更直接