2. 指针¶
- 指针(pointer)在Go语言中可以被拆分为两个核心概念:类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。
- 切片,由指向起始元素的原始指针、元素数量和容量组成。
2.1. 指针基础样例¶
package main
import "fmt"
func main(){
// 定义2个变量
var a int = 1
var b int = 2
// 使用 &变量名 获取对应变量的地址
fmt.Printf("%p %p", &a, &b)
var ptr_a = &a
//var ptr_b = &b
// 打印ptr的类型
fmt.Printf("ptr type: %T\n", ptr_a)
// 打印ptr的指针地址
fmt.Printf("address: %p\n", ptr_a)
aa := *ptr_a
// 取值后的类型
fmt.Printf("value type: %T\n", aa)
// 指针取值后就是指向变量的值
fmt.Printf("value: %d\n", aa)
}
2.2. 指针交互变量值¶
package main
import "fmt"
func swap(a *int, b *int) {
var t = *a
*a = *b
*b = t
}
func mainabc() {
var a = 20
var b = 10
fmt.Println(a, b)
swap(&a, &b)
fmt.Println(a, b)
}
2.3. new创建指针¶
package main
import "fmt"
func main() {
str := new(string)
*str = "Go语言教程"
fmt.Println(*str)
}