编辑
2022-09-22
Golang
00
请注意,本文编写于 791 天前,最后修改于 785 天前,其中某些信息可能已经过时。

目录

指针与变量的关系
指针类型
通过指针获取:内存地址、变量的值
通过指针创建:没有变量名的变量

指针与变量的关系

如果说变量名是数据的“代号”,那么指针存放的则是数据的“实际地址”。 我们可以通过这个地址获取或修改存放于这个地址的变量的值。

当然,指针的存储位置也是用值记录的,存放指针值的变量称为指针变量

image.png

指针类型

Go语言中的指针,它主要由两大核心概念构成:类型指针切片指针

  • 类型指针: go 会根据变量对应的数据类型,完成相应的内存分配,并创建一个指针,指向该内存空间。

    相关信息

    在传递数据时直接使用指针,可以避免创建数据的副本,节约内存开销。 类型指针不能进行偏移和运算,可以避免非法修改为其它数据的风险,也更有利于垃圾回收机制及时找到并回收

  • 切片指针: 切片由指向起始元素的指针、元素数量和总容量构成。适用于切片类数据

通过指针获取:内存地址、变量的值

使用指针更有利于程序运行的性能和稳定性。 在某些操作中,如使用反射修改变量的值,必须使用可寻址的变量(通过指针)。

指针的操作最常用的就是:

  • 获取变量的内存地址,&运算符
  • 获取某个地址对应的值,*运算符
go
//exampleNumberA变量(整数型变量)声明和赋值 var exampleNumberA int = 10 // 空指针,默认初始化的值为 nil // nil 是 Go 中预先声明的标识符,表示指针、接口、通道、映射和切片的零值。 var p *int fmt.Println(p) // & 运算符 //获取exampleNumberA的地址,并赋值给exampleNumberAPtr变量(exampleNumberAPtr的类型是指针类型) exampleNumberAPtr := &exampleNumberA //输出exampleNumberAPtr变量的值(将输出内存地址) fmt.Println(exampleNumberAPtr) // * 运算符 //获取exampleNumberAPtr(指针变量)表示的实际数据值,并赋值给exampleNumberAPtrValue变量(整数型变量) exampleNumberAPtrValue := *exampleNumberAPtr //输出exampleNumberAPtrValue变量(整数型变量)的值 fmt.Println(exampleNumberAPtrValue)

通过指针创建:没有变量名的变量

我们还可以使用new()函数直接创建指针变量,相当于在内存中创建了没有变量名的某种类型的变量。

也就是直接分配一个内存地址,但并不与变量名关联

new()函数的使用格式如下:

go
// type是所在地址存放的数据类型,一旦创建,就会完成内存分配,即使没有赋值 new(type)
go
//使用new()函数创建名为exampleNumberAPtr指针类型变量,表示int64型值 exampleNumberAPtr := new(int64) //修改exampleNumberAPtr表示的实际数据值 *exampleNumberAPtr = 100 //获取exampleNumberAPtr表示的实际数据值 fmt.Println(*exampleNumberAPtr) // 运行后,结果为100

本文作者:Silon汐冷

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!