Go 系列教程 第 15 部分 指標

2022-07-31 05:12:13 字數 2209 閱讀 2232

指標是一種儲存變數記憶體位址(memory address)的變數。

接下來我們寫點**。

package main

import (

"fmt

")func main()

&

type of a is *int  

address of b is 0x1040a124

由於 b 可能處於記憶體的任何位置,你應該會得到乙個不同的位址。

package mainimport (  

"fmt

")func main()

}

上面的程式中,b

b is

b after initialisation

is0x1040a124

通過下面的**,可以看到如何使用解引用。

package main  import (  

"fmt

")func main()

address of b is

0x1040a124

value of b

is255

我們再編寫乙個程式,用指標來修改 b 的值。

package main

import (

"fmt")

func main()

address of b is

0x1040a124

value of b

is255

new value of b is

256

package main

import (

"fmt

")func change(val *int

) func main()

value of a before function call is

58value of a after function call

is55

假如我們想要在函式內修改乙個陣列,並希望呼叫函式的地方也能得到修改後的陣列,一種解決方案是把乙個指向陣列的指標傳遞給這個函式。

package main

import (

"fmt")

func modify(arr *[3]int

) func main()

modify(&a)

fmt.println(a)

}

a[x]。下面我們用簡寫形式重寫以上**。

package main

import (

"fmt")

func modify(arr *[3]int

) func main()

modify(&a)

fmt.println(a)

}

這種方式向函式傳遞乙個陣列指標引數,並在函式內修改陣列。儘管它是有效的,但卻不是 go 語言慣用的實現方式。我們最好使用切片來處理。接下來我們用切片來重寫之前的**。

package main

import (

"fmt")

func modify(sls

int)

func main()

modify(a[:])

fmt.println(a)

}

go 並不支援其他語言(例如 c)中的指標運算。

package mainfunc main() 

p := &b

p++}

上面的程式會丟擲編譯錯誤:main.go:6: invalid operation: p++ (non-numeric type *[3]int)

本文由 gctt 原創編譯,go 中文網 榮譽推出

Go 系列教程 第 20部分 併發入門

go 是並髮式語言,而不是並行式語言。在討論 go 如何處理併發之前,我們必須理解何為併發,以及併發與並行的區別。併發是指立即處理多個任務的能力。乙個例子就能很好地說明這一點。我們可以想象乙個人正在跑步。假如在他晨跑時,鞋帶突然松了。於是他停下來,系一下鞋帶,接下來繼續跑。這個例子就是典型的併發。這...

Microformats教程 第3部分

本文首發於 http www.lunaticsun.com article microformats three 目前,這個系列已經有兩篇文章了,它們是 什麼是microformats microformats教程 第1部分 microformats教程 第2部分 在這一部分中,我們將討論一種全新的...

MySQL系列,第1部分 Mysql簡介

mysql是乙個關係型資料庫管理系統 由瑞典 mysql ab 公司開發,目前屬於 oracle 公司。mysql 最流行的關係型資料庫管理系統 在 web 應用方面 mysql 是最好的 rdbms relational database management system,關聯式資料庫管理系統 ...