运行代码观察现象:
1 package main 2 3 import "fmt" 4 5 func change(num *int32) { 6 *num += 100 7 } 8 9 func main() { 10 var a int32 11 a = 100 12 fmt.Printf("a的值为:%d ", a) 13 //用%p 来输出内存地址 用&符号取a的地址 这一点和C语言一样 14 fmt.Printf("a的地址为%p ", &a) 15 16 //这个p是引用类型 其实就是一个指针 和C语言里面的指针异曲同工 17 //使用方式和C语言一模一样 18 var p *int32 19 p = &a 20 fmt.Printf("p所保存的地址为%p ", p) 21 fmt.Printf("p所指的变量的值为为%d ", *p) 22 23 *p = 150 24 fmt.Printf("指针修改后 p所指的变量的值为为%d ", *p) 25 fmt.Printf("指针修改后 a的值为:%d ", a) 26 27 28 //%T 表示输出其类型 29 fmt.Printf("p的类型为%T ", p) 30 fmt.Printf("a的类型为%T ", a) 31 32 //通过指针和函数修改变量的值 33 change(p) 34 fmt.Printf("指针函数修改后 p所指的变量的值为为%d ", *p) 35 fmt.Printf("指针函数修改后 a的值为:%d ", a) 36 37 //修改数组就传数组的指针 同理 38 //注意 切片是引用类型,切片也是指针只是是一个特殊的指针 39 40 }
输出结果:
a的值为:100 a的地址为0xc000092000 p所保存的地址为0xc000092000 p所指的变量的值为为100 指针修改后 p所指的变量的值为为150 指针修改后 a的值为:150 p的类型为*int32 a的类型为int32 指针函数修改后 p所指的变量的值为为250 指针函数修改后 a的值为:250
make和new的区别: