Golang - 指針


指針

定義

  • 地址就是內存地址, 指針包含類型的地址
  • 指針可以做邏輯判斷
  • 與 c 語言不通, go 語言中, 指針不可操作
package main

import "fmt"

func main() {
	a := 100
	b := "s"

	fmt.Printf("%T, %T\n", &a, &b) // *int, *string, 類型不同, 不可混用
}


取值

  • &: 值取指針
  • *: 指針取值
package main

import "fmt"

func main() {
	a := 100

	// 根據值的信息取指針
	fmt.Println(&a)

	b := &a

	// 根據指針的信息取值
	fmt.Println(*b)
}

指針的應用

package main

// 修改數組(值類型)

import "fmt"

func changeArray1(a1 [3]int) {
	// 將 a1 的元素修改
	a1[0] = 100
}

func changeArray2(a1 *[3]int) {
	// 語法糖
	a1[0] = 100 // 完全寫法: (*a1)[0] = 100
}

func main() {
	// 指針的應用
	a := [3]int{1, 2, 3}
	changeArray1(a) // 相當於在函數中複製了數組, 賦值給了a1
	fmt.Println(a)  // [1 2 3]

	changeArray2(&a)
	fmt.Println(a) // [100 2 3]
}


new 和 make

package main

import "fmt"

func main() {
	// new 初始化"值類型"指針
	a := new([3]int) // 得到一個 [3]int 類型的指針
	fmt.Printf("%v, %[1]T\n", a)
	// 根據指針賦值
	a[2] = 1
	fmt.Printf("%v\n", *a)

	// make 初始化引用類型的指針, slice, map, channel
	b := make([]int, 0, 8)
	fmt.Println(b)

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章