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)
}