1 package main
2
3 import "fmt"
4
5 func fun1() {
6 fmt.Println("fun1().....")
7 }
8
9 // 普通函数
10 func fun2() [4]int {
11 arr := [4]int{1, 2, 3, 4}
12 return arr
13 }
14
15 // 指针函数
16 func fun3() *[4]int {
17 arr := [4]int{5, 6, 7, 8}
18 fmt.Printf("函数中arr的地址:%p\n", &arr) // 函数中arr的地址:0xc000010260
19 return &arr
20 }
21
22 func main() {
23 /*
24 函数指针:一个指针,指向了一个函数的指针。
25 因为go语言中,function,默认看作一个指针,没有*。
26
27
28 slice,map,function
29
30 指针函数:一个函数,该函数的返回值是一个指针。
31
32 */
33 var a func()
34 a = fun1
35 a() // fun1().....
36
37 arr1 := fun2()
38 fmt.Printf("arr1的类型:%T,地址:%p,数值:%v\n", arr1, &arr1, arr1)
39 // arr1的类型:[4]int,地址:0xc0000101e0,数值:[1 2 3 4]
40
41 arr2 := fun3() // 函数中arr的地址:0xc000010260
42 fmt.Printf("arr2的类型:%T,地址:%p,数值:%v\n", arr2, &arr2, arr2)
43 // arr2的类型:*[4]int,地址:0xc000006030,数值:&[5 6 7 8]
44 fmt.Printf("arr2指针中存储的数组的地址:%p\n", arr2)
45 // arr2指针中存储的数组的地址:0xc000010260
46 }