指针
💥本文章所有相关go代码参考自go 1.18+版本
Go
语言中的指针不能进行偏移和运算,是安全指针。- 指针地址、指针类型和指针取值。
Go
语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。- 传递数据使用指针,而无须拷贝数据。
- 类型指针不能进行偏移和运算。
Go
语言中的指针操作非常简单,只需要记住两个符号:&
(取地址)、*
(根据地址取值)。
指针地址与指针类型
- 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置,
Go
语言中使用&
字符放在变量前面对变量进行**“取地址”**操作。 Go
语言中的值类型(int
、float
、bool
、string
、array
、struct
),对应的指针*int
、*int64
、*string
等。
|
|
|
|
指针取值
- 在对普通变量使用
&
操作符取地址后会获得这个变量的指针,然后可以对指针使用*
操作,也就是指针取值。
|
|
空指针
- 当一个指针被定义后没有分配到任何变量时,它的值为
nil
。 - 空指针的判断。
|
|
类型转换
|
|
指针练习
- 程序定义一个
int
变量num
的地址并打印。 - 将
num
的地址赋给指针ptr
,并通过ptr
去修改num
的值。
|
|
使用注意
- 【常量】不能使用&取地址,常量是只读类型因此取地址没啥意义。
- 【字符串元素】,比如
&string[0]
不能取地址,字符串也是只读类型对字符串中的符号取地址意义也不大。 - 【字典元素】,比如
&map[‘key’]
不能取地址,字典的存储位置是经常变化的,因此对字典中元素取地址意义不大。
总结
- 取地址操作符
&
和取值操作符*
是一对互补操作符。&
:取出地址;*
:根据地址取出地址指向的值。
- 变量、指针地址、指针变量、取地址、取值的相互关系和特性如下:
- 对变量进行取地址(
&
)操作,可以获得这个变量的存储地址。 - 指针变量的值是指针地址。
- 对指针变量进行取值(
*
)操作,可以获得指针变量指向的原变量的值。
- 对变量进行取地址(
- 指针传值例子。
|
|