1. 指针的概念
指针是存储另一个变量的内存地址的变量
2. 获取变量的地址
Go语言的取地址符是&,放到一个变量前使用就会返回响应变量的内存地址
package main
import "fmt"
func main() {
a := 10
fmt.Println("a的数据是: ",a)
fmt.Printf("%T\n",a)
fmt.Printf("a的地址是:%p\n",&a)
}
//结果
a的数据是: 10
int
a的地址是:0xc00000a0e8
3. 声明指针
声明指针,*T是指指针变量的类型,它指向T类型的值
var var_name *var-type
var_type:指针类型
var_name:指针变量名
*:用于指定变量是作为一个指针
var ip *int //指向整形
//代码
package main
import "fmt"
func main() {
a := 10
//fmt.Println("a的数据是: ",a)
//fmt.Printf("%T\n",a)
//fmt.Printf("a的地址是:%p\n",&a)
// 创建一个指针变量,用于存储变量a的地址
var p1 *int //<nil>,空指针
fmt.Println(p1)
p1 = &a //p1指向了a的内存地址
fmt.Println("p1的数值是: ",p1) //p1中存储的是a的地址
fmt.Printf("p1自己的地址是%P: ",&p1)
fmt.Println("p1的数值,是a的地址,该地址存储的数据:",*p1)//获取指针指向的变量的数值
// 操作变量,更改数值,不会改变地址
a = 100
fmt.Println(a)
fmt.Printf("%p\n",&a)
// 通过指针,改变变量的数值
*p1 = 200
fmt.Println(a)
// 指针的指针
var p2 **int
fmt.Println(p2)
p2 = &p1
fmt.Printf("a的数据类型是%T,P1的数据类型是%T,P2的数据类型是%T",a,p1,p2)
fmt.Println("p2的数值是: ",p2) //p1中存储的是a的地址
fmt.Printf("p2自己的地址是%P: ",&p2)
fmt.Println("p2存储的地址,一定的数值,就是p1的地址,对应的数据",*p2)
fmt.Println("p2存储的地址,一定的数值,再获取对应的数值",**p2)
}
//结果
<nil>
p1的数值是: 0xc0000a0090
p1自己的地址是%!P(**int=0xc0000ca018): p1的数值,是a的地址,该地址存储的数据: 10
100
0xc0000a0090
200
<nil>
a的数据类型是int,P1的数据类型是*int,P2的数据类型是**intp2的数值是: 0xc0000ca018
p2自己的地址是%!P(***int=0xc0000ca028): p2存储的地址,一定的数值,就是p1的地址,对应的数据 0xc0000a0090
p2存储的地址,一定的数值,再获取对应的数值 200
网友评论