1. 程式人生 > GO語言入門 >25 Go 語言的指標

25 Go 語言的指標

1.指標的定義和使用

在 Go 語言中指標型別的宣告和 C/C++ 類似,都是採用*符號來區分正常型別變數和指標變數。

程式碼示例

package main

import (
    "fmt"
)

func main() {
    str := "Hello World !"
    var strP *string
    strP = &str
    *strP = "Hello Codey !"
    fmt.Println("指標strP的地址為", strP)
    fmt.Println("指標strP指向的值為", *strP)
    fmt.Println
("指標str的地址為", &str) fmt.Println("指標str的值為", str) }
  • 第 9 行:使用*+變數型別的形式宣告一個string型別的指標。
  • 第 10 行:將指標 strP 指向變數 str,也就是將變數 str 的地址賦值給指標變數 strP 。&為取地址符,可以取出變數所在的地址。
  • 第 11 行:通過指標修改 str 的值。

執行結果

圖片描述

從以上輸出結果可以看出,變數 strP 儲存的值就是變數 str 的地址,可以通過使用 *strP 操作符改變其儲存的地址所儲存的值

2. 指標作為函式的引數

Go 語言中只有值傳遞,沒有引用傳遞

,因為引用傳遞設計之初是為了解決函式想要有多個返回值的問題,但是 Go 語言的函式自帶多返回值的返回方式。所以想要指標作為引數傳入函式中,只能傳遞地址進入函式進行修改,並不能直接引用指標引數,這一特點就大大降低了Go語言指標的使用難度。

程式碼示例

package main

import (
    "fmt"
)

func main() {
    a := 10
    b := 20
    fmt.Println("交換前的a=", a, "b=", b)
    swap(&a, &b)
    fmt.Println("交換後的a=", a, "b=", b)
}
func swap(a, b *int) { *a, *b = *b, *a }
  • 第 11 行:將變數a和b的地址作為函式swap指標引數的值傳入函式;
  • 第 16 行:交換這兩個指標儲存的地址所儲存的值。

執行結果

圖片描述

3. 小結

本文主要講解了Go語言中指標的使用,以下為注意事項:

  • Go 語言的指標不可以做偏移
  • Go 語言的指標可以看作一個儲存地址的特殊變數型別