GoatSucker 2020-03-28
区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。
所有Go里面的指针比较简单,只需要记住以下几点:
&变量名: 获取变量的内存地址
*pointor:通过指针获取指针对应变量的值
package main import "fmt" func main() { n := 28 fmt.Println(&n) //1.&变量:获取变量的内存地址 p := &n fmt.Printf("%T\n", p) //*int 存储int变量类型的内存地址的指针 //2.*指针变量:获取指针指向变量的值 v1 := *p fmt.Println(v1) fmt.Printf("%T\n", v1) }
不管是Python还是Go程序 执行过程中数据载入内存后,在计算机内存中都有它们的内地址,这就是指针。
指针的作用就是保存某1个数据在内存中的内存地址,方便我们在内存中快速查找到该数据(变量)。
在Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:*int
、*int64
、*string
等。
package main import "fmt" func main() { //基本数据类型在内存中的布局 var i int = 10 //获取变量i的内存地址 fmt.Println("变量i的内存地址:", &i) //声明1个 ptr指针变量,指向1个类型为int的内存地址 var ptr *int = &i fmt.Println(ptr) //获取指针的内存地址 fmt.Println(&ptr) //通过指针获取变量i对应的值(10) fmt.Println(*ptr) //通过指针修改变量i对应的值 *ptr = 222 fmt.Println(i) //通过指针修改变量的值 name := "成龙" age := "18" por1 := &name *por1 = "JackCheng" por1 = &age *por1 = "68" fmt.Println(name, age) }