每天五分钟Go - 指针

什么是指针

一个指向内存地址的变量,称为指针变量,指针是一个特殊的变量,他的值存储的是另一个值的内存地址

指针变量的声明

var var_name *type

var_name 是指针变量的名称,type是指针变量的类型,*用于指定变量是作为一个指针

var a *int
var b *string

可以使用&获取一个变量的内存地址

	a:=10
	b:="abc"
	fmt.Println("a的地址:",&a)
	fmt.Println("b的地址:",&b)

	var pa *int
	var pb *string
	pa=&a
	pb=&b
	fmt.Println("a的地址:",pa)
	fmt.Println("b的地址:",pb)

	fmt.Println("a的值:",*pa) //获取指针地址的所存储的值 使用 *
	fmt.Println("b的值:",*pb)
	
	
	
	/* 运行结果如下:
	a的地址: 0xc000092000
	b的地址: 0xc000088030
	a的地址: 0xc000092000
	b的地址: 0xc000088030
	a的值: 10
	b的值: abc
	*/

声明指针变量时可以直接使用:=号,例

        pe:=&a
	pc:=&pb

一个完整的示例

// 准备一个字符串类型
	var house = "Malibu Point 10880, 90265"

	ptr := &house

	// 对字符串取地址, ptr类型为*string
	fmt.Printf("ptr 类型:%T\n",ptr)

	//打印ptr的地址
	fmt.Printf("ptr 地址:%p\n",ptr)

	//打印ptr的值
	v := *ptr
	//取值后的类型
	fmt.Printf("ptr 的类型:%T\n",v)
	//地址保存的值
	fmt.Printf("ptr 的值:%s\n",v)

获取地址的操作符'&' 和 获取值的操作符''是一对互补操作符,&取出地址,根据地址取出地址指向的值

通过指针修改值

func swap(a,b *int)  {
	t:=*a
	*a=*b
	*b=t
}


        a,b:=1,2
	swap(&a,&b)
	fmt.Println(a,b)//打印结果为:2,1

使用new函数创建指针

str := new(string)
*str = "ninja"
fmt.Println(*str)
posted @ 2019-03-18 22:45  Hitechr  阅读(175)  评论(0)    收藏  举报