中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中的指針運算實例分析

發布時間:2020-10-12 19:17:59 來源:腳本之家 閱讀:157 作者:不是JS 欄目:編程語言

本文實例分析了Go語言中的指針運算方法。分享給大家供大家參考。具體分析如下:

Go語言的語法上是不支持指針運算的,所有指針都在可控的一個范圍內使用,沒有C語言的*void然后隨意轉換指針類型這樣的東西。最近在思考Go如何操作共享內存,共享內存就需要把指針轉成不同類型或者對指針進行運算再獲取數據。

這里對Go語言內置的unsafe模塊做了一個實驗,發現通過unsafe模塊,Go語言一樣可以做指針運算,只是比C的方式繁瑣一些,但是理解上是一樣的。

下面是實驗代碼:

復制代碼 代碼如下:
package main
import "fmt"
import "unsafe"
type Data struct {
    Col1 byte
    Col2 int
    Col3 string
    Col4 int
}
func main() {
    var v Data
    fmt.Println(unsafe.Sizeof(v))
    fmt.Println("----")
    fmt.Println(unsafe.Alignof(v.Col1))
    fmt.Println(unsafe.Alignof(v.Col2))
    fmt.Println(unsafe.Alignof(v.Col3))
    fmt.Println(unsafe.Alignof(v.Col4))
    fmt.Println("----")
    fmt.Println(unsafe.Offsetof(v.Col1))
    fmt.Println(unsafe.Offsetof(v.Col2))
    fmt.Println(unsafe.Offsetof(v.Col3))
    fmt.Println(unsafe.Offsetof(v.Col4))
    fmt.Println("----")
    v.Col1 = 98
    v.Col2 = 77
    v.Col3 = "1234567890abcdef"
    v.Col4 = 23
    fmt.Println(unsafe.Sizeof(v))
    fmt.Println("----")
    x := unsafe.Pointer(&v)
    fmt.Println(*(*byte)(x))
    fmt.Println(*(*int)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col2))))
    fmt.Println(*(*string)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col3))))
    fmt.Println(*(*int)(unsafe.Pointer(uintptr(x) + unsafe.Offsetof(v.Col4))))
}

以上代碼在我機器上的執行結果如下(結果會因機器和系統的不同而不太一樣):
32
----
1
4
8
4
----
0
4
8
24
----
32
----
98
77
1234567890abcdef
23

unsafe模塊的文檔中提到幾條轉換規則,理解了以后就很容易做指針運算了:

A pointer value of any type can be converted to a Pointer.
A Pointer can be converted to a pointer value of any type.
A uintptr can be converted to a Pointer.
A Pointer can be converted to a uintptr.

希望本文所述對大家的Go語言程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

越西县| 长汀县| 平塘县| 响水县| 固阳县| 麻城市| 邹平县| 临沂市| 石家庄市| 紫云| 偃师市| 轮台县| 南川市| 萝北县| 巫溪县| 安溪县| 波密县| 呼图壁县| 泰兴市| 宁南县| 应用必备| 乐安县| 宜阳县| 钟山县| 临湘市| 禹州市| 光山县| 商南县| 丁青县| 澄城县| 乐昌市| 南陵县| 岱山县| 屯留县| 漾濞| 万年县| 伊通| 耒阳市| 松桃| 邹平县| 中江县|