Go语言之数组指针和指针数组
package main
import "fmt"
func main() {
/*
数值指针:首先是一个指针,一个数组的地址。
*[4]Type
指针数组:首先是一个输出,存储的数据类型是指针
[4]*Type
*/
// 1.创建一个普通的数组
arr1 := [4]int{1,2,3,4}
fmt.Println(arr1)
// 2.创建一个指针,存储该数组的地址--》数组指针
var p1 *[4]int
p1 = &arr1
fmt.Println(p1) //&[1 2 3 4]
fmt.Printf("%p\n",p1) //数组arr1的地址
fmt.Printf("%p\n",&p1)//p1指针自己的地址
// 3.根据数组指针,操作数据
(*p1)[0] = 100
fmt.Println(arr1)
p1[0] = 200 //简化写法
fmt.Println(arr1)
// 指针数组
a := 1
b := 2
c := 3
d := 4
arr2 := [4] int {a,b,c,d}
arr3 := [4] *int {&a,&b,&c,&d}
fmt.Println("arr2是:",arr2) //[1 2 3 4]
fmt.Println("arr3是:",arr3) //[0xc00000a138 0xc00000a140 0xc00000a148 0xc00000a150]
arr2[0] = 100
fmt.Println("arr2是:",arr2) //arr2是: [100 2 3 4]
fmt.Println("a的值是:",a) //a的值是: 1
*arr3[0] = 100
fmt.Println("arr3是:",arr3) //arr3是: [0xc00000a138 0xc00000a140 0xc00000a148 0xc00000a150]
fmt.Println("a的值是:",a) //a的值是: 100
b = 1000
fmt.Println("arr2是:",arr2) //[100 2 3 4]
fmt.Println("arr3的值是:",arr3) //[0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
for i:=0;i<len(arr3);i++{ //100,1000,3,4
fmt.Println(*arr3[i])
}
}
//结果
[1 2 3 4]
&[1 2 3 4]
0xc00011c140
0xc000148020
[100 2 3 4]
[200 2 3 4]
arr2是: [1 2 3 4]
arr3是: [0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
arr2是: [100 2 3 4]
a的值是: 1
arr3是: [0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
a的值是: 100
arr2是: [100 2 3 4]
arr3的值是: [0xc00011e0c0 0xc00011e0c8 0xc00011e0d0 0xc00011e0d8]
100
1000
3
4