golang学习之golang数据类型(中)go指针


前言

上次学习了golang的整形、浮点型、bool类型等基础数据类型和array、struts复合类型以及引用类型的slice、map。
本次学习指针类型


一、指针是什么?

想象一下你在放风筝,天空飞翔的风筝是数据而你手中的线就是数据的指针。风筝有各式各样的风筝,线也有各种各样的线。

二、指针的使用

和普通变量一样指针变量的使用也是三个步骤:
1、定义变量
2、为变量赋值
3、读取变量的值
手中直接抓着风筝线不大好,不然手会被磨秃噜皮。我们需要一个线盘,线盘有两个作用:
1、放线:放飞风筝手中拿着线盘,对应指针操作的取地址运算符(&)
2、收线:收回线可以拿到风筝,对应指针操作的取值运算符(*)
实例代码如下:

package main

func main() {
	// 通过系统函数new 定义一个指针变量
	i := new(int)
	// 通过*获取指针的值,整形变量默认值0
	println(*i)

	var n int = 9
	// 通过&获取到变量n的指针
	var m = &n
	// 打印指针的值即n地址
	println(m)
	// 打印指针指向的值
	println(*m)

	// 声明一个指针变量
	var iptr *int
	// 为iptr赋值,值为n的地址
	iptr = &n
	// 打印指针
	println(iptr)
	// 打印指针指向的值
	println(*iptr)

	// m是一个指针变量,mptr是指向m的指针
	mptr := &m
	println(mptr)
	println(*mptr)
	println(**mptr)
}

三、指针的三种分类

1、如上面示例中的类型

i := new(int)
mptr := &m
println(*i,*mptr)

2、unsafe.Pointer

3、uintptr 可进行指针地址的位移操作

四、三种类型的转换

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	s := make([]int, 10)
	s[1] = 2

	p := &s[0]
	fmt.Println(*p)
	// * ——> unsafe.Pointer ——> uintptr
	up := uintptr(unsafe.Pointer(p))
	// 指针位移至下一个单位地址
	up += unsafe.Sizeof(int(0))
	// uintptr ——> unsafe.Pointer ——> *
	p2 := (*int)(unsafe.Pointer(up))
	fmt.Println(p2)
	fmt.Println(*p2)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值