package main
import "fmt"
//goalg里的指针类型
func main() {
var i int = 1 //1) 基本数据类型,变量存的就是值,也叫值类型
fmt.Println( "变量的地址是:",&i) //2) 获取变量的地址,用&
fmt.Println("--------------------")
//下列var ptr *int = &i的剖析
//1.ptr是一个指针变量
//2.ptr 的类型 *int
//ptr本身的值是&i
var ptr *int = &i
fmt.Printf("输出变量地址:%v\n",ptr)
fmt.Printf("输出指针变量的地址:%v\n",&ptr)
fmt.Printf("输出指针变量指向的值:%v\n",*ptr)
fmt.Println("--------------------")
//案例题:
var a int = 300
//var ptrs *int = a 指针类型ptrs只能接收a的地址赋值,不能直接赋值
//修改为:
var ptrs *int = &a
fmt.Printf("输出指针类型的地址:%v 输出指针类型变量指向的值:%v\n",ptrs,*ptrs)
fmt.Println("--------------------")
var b int = 300
var b1 float32 = float32(b)//指针类型也需要先转换类型为同类型,才能接收地址
var ptrsd *float32 = &b1
fmt.Printf("输出指针类型的地址:%v 输出指针类型变量指向的值:%v 查看当前指针变量类型:%T\n ",ptrsd,*ptrsd,ptrsd)
fmt.Println("--------------------")
var aa int = 300
var bb int = 400
//var aa,bb int = 300,400 一行声明也可以
var ptrr *int = &a //把变量地址赋值给同类型指针变量
*ptrr = 100 //使用指针变量修改变量内的数值
ptrr = &b //200 //因为已经有定义所以无需重新定义
*ptrr = 200 // 使用指针变量修改变量内的数值
fmt.Printf("a的数值是:%d b的数值是:%d 定义的指针类型变量数值是:%d\n",aa,bb,*ptrr)
var qwe int = 600
var qwer *int = &qwe //获取变量的地址,用& 把变量地址赋值到指针变量里
*qwer = 200 //修改指针变量数值
fmt.Printf("%d",*qwer) //使用指针变量
}
运行结果
变量的地址是: 0xc00000a088
--------------------
输出变量地址:0xc00000a088
输出指针变量的地址:0xc000006030
输出指针变量指向的值:1
--------------------
输出指针类型的地址:0xc00000a0b0 输出指针类型变量指向的值:300
--------------------
输出指针类型的地址:0xc00000a0c0 输出指针类型变量指向的值:300 查看当前指针变量类型:*float32
--------------------
a的数值是:300 b的数值是:400 定义的指针类型变量数值是:200
200