go语言的指针数组与数组指针
package main
import "fmt"
/**
Author: xym
Date: 2021/4/21 22:17
Project: Go_Learning
Description:
*/
//三个操作符的优先级:() > [] > *
func main() {
a1 := [5]int{1, 2, 3, 4, 5}
//指针数组:[n]*int 表示数组里每个元素都是 指针类型
var p [5]*int
for i := range a1 {
p[i] = &a1[i] //加&的原因是p中元素已经设定为指针类型,所以从a1中取出的元素也要变为指针类型
}
for j, k := range p {
fmt.Printf("索引:%d, 值:%d,内存地址:%d\n", j, *k, k)
}
fmt.Println()
/*也可以以这种形式输出
for j := range p {
fmt.Printf("索引:%d, 值:%d,内存地址:%d\n", j, *p[j], p[j])
}
*/
/*
结果:(可见每个元素的内存地址都不相同)
索引:0, 值:1,内存地址:824633771136
索引:1, 值:2,内存地址:824633771144
索引:2, 值:3,内存地址:824633771152
索引:3, 值:4,内存地址:824633771160
索引:4, 值:5,内存地址:824633771168
*/
//-------------------------------------------------------------------------------
//数组指针:*[n]int 表示一个指向数组的指针,里面的元素是int型
var q *[5]int
/*
由后面可知每个元素的地址都一样,所以可以直接把这个数组的地址赋值给另一个数组,
而不需要像指针数组每一个元素都要单独赋值
*/
q = &a1
for j, k := range q {
fmt.Printf("索引:%d, 值:%d,内存地址:%d\n", j, (*q)[j], &k)
}
/*
结果:(可见每个元素的内存地址是一样的)
索引:0, 值:1,内存地址:824634425432
索引:1, 值:2,内存地址:824634425432
索引:2, 值:3,内存地址:824634425432
索引:3, 值:4,内存地址:824634425432
索引:4, 值:5,内存地址:824634425432
*/
}