go 指針

指針指針

Go 擁有指針。指針保存了值的內存地址。code

類型*T是指向T類型值的指針。其零值爲nil內存

var p *intimport

&操做符會生成一個指向其操做數的指針。引用

i := 42
p = &iim

*操做符表示指針指向的底層值。重定向

fmt.Println(*p) // 經過指針 p 讀取 i
*p = 21 // 經過指針 p 設置 icopy

這也就是一般所說的「間接引用」或「重定向」。co

與 C 不一樣,Go 沒有指針運算生成

案例:

package main

import "fmt"

func main() {
    i, j := 42, 2701

    p := &i         // 指向 i
    fmt.Println(*p) // 經過指針讀取 i 的值
    *p = 21         // 經過指針設置 i 的值
    fmt.Println(i)  // 查看 i 的值

    p = &j         // 指向 j
    *p = *p / 37   // 經過指針對 j 進行除法運算
    fmt.Println(j) // 查看 j 的值
}
package main

import "fmt"

func swap(a *int, b *int) {
    tmp := *a  // 「間接引用」或「重定向」 注意go沒有指針運算
    *a = *b
    *b = tmp
    return
}

func main() {
    first := 100
    second := 200
    swap(&first, &second)
    fmt.Println(first) // 200
    fmt.Println(second) // 100
}
package main

import "fmt"

func swap(a *int, b *int) (int, int) {
    tmp := a
    a = b
    b = tmp
    return *a, *b
}

func main() {
    first := 100
    second := 200
    a, b := swap(&first, &second) // 交換a,b值,地址copy
    fmt.Println(a, b)
    fmt.Println(first)  // 100
    fmt.Println(second) // 200
}
相關文章
相關標籤/搜索