文章目录
Go的指针
内存地址是内存中每个字节单元的唯一编号,而指针是一个实体。指针会分配内存空间,相当于一个专门用来保存内存地址的整型变量。
- 取地址运算符
&
用来获取对象的地址 - 指针运算符
*
用于间接的引用目标对象 - 二级指针
**T
如包含包名,则写成*package.T
- 并非所有对象都能进行取地址操作,但变量总是能正确的返回指针运算符为左值的时候,可更新目标对象状态;而为右值的时候则为获取目标状态
- 指针类型支持相等运算符,但是不能进行加减运算和类型转换。
x := 1234
p := &x
p++ // Error: invalid operation: p += 1 (mismatched types *int and int)
- 指针没有专门指向成员的
->
,统一使用.
选择表达式
函数传地址交互两个变量的值:
package main
import "fmt"
func main() {
a := 100
b := 200
exchange(&a, &b)
fmt.Println(a, b)
}
func exchange(a, b *int) (int, int) {
*a, *b = *b, *a
fmt.Println(*a, *b)
return *a, *b
}