1. 程式人生 > >go語言之指針

go語言之指針

ptr

數組 Arrays

數組是內置(build-in)類型,是一組同類型數據的集合,它是值類型,通過從0開始的下標索引訪問元素值。在初始化後長度是固定的,無法修改其長度。當作為方法的入參傳入時將復制一份數組而不是引用同一指針。數組的長度也是其類型的一部分,通過內置函數len(array)獲取其長度。

在開始前先了解指針與地址:

Go 語言中指針是很容易學習的,Go 語言中使用指針可以更簡單的執行一些任務,變量是一種使用方便的占位符,用於引用計算機內存地址,Go 語言的取地址符是 &,放到一個變量前使用就會返回相應變量的內存地址。

package main
import "fmt"
func main() {
    var a int = 10
    fmt.Println(&a)
}

執行的結果:

C:/Users/cherry/go/src/test/test.exe [C:/Users/cherry/go/src/test]

0xc0420381d0

指針:

一個指針變量可以指向任何一個值的內存地址它指向那個值的內存地址,類似於變量和常量,在使用指針前你需要聲明指針。指針聲明格式如下:


var var_name *var-type
var-type 為指針類型,var_name 為指針變量名,* 號用於指定變量是作為一個指針

使用流程:

1、定義指針變量

2、為指針變量賦值

3、訪問指針變量中指向地址的值

在指針類型前面加上 * 號(前綴)來獲取指針所指向的內容

package main
import "fmt"
func main() {
    var a int = 20
    var ip *int
    ip = &a //獲取變量的存儲地址
    fmt.Printf("ip變量的存儲地址:%x\n", ip)
    fmt.Printf("a變量的地址是:%x\n", &a)
    fmt.Printf("*ip變量的值:%d\n", *ip)
}

執行結果:

C:/Users/cherry/go/src/test/test.exe [C:/Users/cherry/go/src/test]

ip變量的存儲地址:c0420381d0

a變量的地址是:c0420381d0

*ip變量的值:20

Go 空指針

當一個指針被定義後沒有分配到任何變量時,它的值為 nil

nil 指針也稱為空指針

nil在概念上和其它語言的null、None、nil、NULL一樣,都指代零值或空值

一個指針變量通常縮寫為 ptr

Go 指針數組

egg:

package main
import "fmt"
const max int = 3

func main() {
    a := []int{10, 20, 30}
    //var i int
    for i := 0; i < max; i++ {
        fmt.Printf("a[%d]=%d\n", i, a[i])
    }
}

結果:

C:/Users/cherry/go/src/test/test.exe [C:/Users/cherry/go/src/test]

a[0]=10

a[1]=20

a[2]=30

有一種情況,我們可能需要保存數組,這樣我們就需要使用到指針,以下聲明了整型指針數組:

var ptr [max] *int //ptr 為整型指針數組。因此每個元素都指向了一個值

egg:

package main
import "fmt"
const MAX int = 3
func main() {
    a := [...]int{10, 20, 30}
    //var i int
    var ptr [MAX]*int
    for i := 0; i < MAX; i++ {
        ptr[i] = &a[i] //整數地址賦值給指針數組
    }
    for i := 0; i < MAX; i++ {
        fmt.Printf("a[%d]=%d\n", i, *ptr[i])
    }
}

如果一個指針變量存放的又是另一個指針變量的地址,則稱這個指針變量為指向指針的指針變量,當定義一個指向指針的指針變量時,第一個指針存放第二個指針的地址,第二個指針存放變量的地址

指向指針的指針變量聲明格式如下::var ptr **int

訪問指向指針的指針變量值需要使用兩個 * 號 egg:

package main
import "fmt"
func main() {
    var a int
    var ptr *int
    var pptr **int
    a = 300
    ptr = &a
    pptr = &ptr
    fmt.Printf("變量a=%d\n", a)
    fmt.Printf("指針變量*ptr=%d\n", *ptr)
    fmt.Printf("指向指針的指針變量**pptr=%d\n", **pptr)
}

執行的結果:

C:/Users/cherry/go/src/test/test.exe [C:/Users/cherry/go/src/test]

變量a=300

指針變量*ptr=300

指向指針的指針變量**pptr=300


本文出自 “DBAspace” 博客,請務必保留此出處http://dbaspace.blog.51cto.com/6873717/1962925

go語言之指針