2

【笔记】Go语言的指针

 1 year ago
source link: https://loli.fj.cn/2023/04/02/Go%E8%AF%AD%E8%A8%80%E7%9A%84%E6%8C%87%E9%92%88/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Go语言的指针学习笔记

声明指针变量

  • 声明一个指针,默认为空指针(nil),默认值为nil,值为0
  • 访问空指针会报错
  • 0~255为系统占用,不可以读写,如果读写会报错

数据类型:需要与所存储的数据类型对应

var p *数据类型

定义指针变量

&变量:通过&操作符,获取变量地址,赋值给指针变量

var p *数据类型 = &变量

定义野指针

  • 指针变量指向了一个未知的内存地址
  • 访问野指针会报错
var p *数据类型 = 0xFFFFFFFF

为指针变量创建一块内存

  • 在堆区开辟空间,将地址值赋值给指针
  • 其内存的空间的大小为指定数据类型的大小,其默认值为数据库类型默认值
  • 在Go语言中只需要开辟空间,不需要释放空间
p = new(数据类型)

获取指针指向的内存空间的数据

&p

修改指针指向的内存空间的数据

&p = 数据

函数参数地址传递

  • 以交换数据的函数为例
func 函数名(a *int, b *int) {
*a, *b = *b, *a
}

声明数组指针

var p *[数组长度]数据类型

定义数组指针

  • 指向数组的指针
var p *[数组长度]数据类型 = &数组名

通过指针找到数组元素

(*p)[数组下标]
  • Go语言对指针的优化
p[数组下标]

声明切片指针

var p *[]数据类型

定义切片指针

var p *[]数据类型 = &切片名

通过指针找到切片元素

(*p)[数组下标]

通过指针获取切片长度

len(*p)

通过指针遍历切片

for k, v := range *p {
...
}

与指针相关的输出

输出数据类型

fmt.Printf("%T", p)
fmt.Printf("%p", p)

结构体指针

声明结构体指针

var 变量名 *结构体名

定义结构体指针

var 变量名 *结构体名 = &结构体变量名

通过结构体操作结构体属性

(*p).属性名 = 属性值
p.属性名 = 属性值
  • 存储指针的指针
pp = &p

哔哩哔哩——喔咔咔耶耶


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK