91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

长宁县| 敖汉旗| 左云县| 荣昌县| 会理县| 宜黄县| 抚顺县| 苗栗市| 天峨县| 平陆县| 荣昌县| 金平| 安吉县| 南靖县| 岳普湖县| 花莲县| 瓦房店市| 江北区| 仁怀市| 塔城市| 涿鹿县| 花莲市| 禄丰县| 麻栗坡县| 大新县| 郎溪县| 萍乡市| 陈巴尔虎旗| 曲麻莱县| 阳朔县| 柳州市| 卓资县| 乌兰察布市| 家居| 清镇市| 信阳市| 阜康市| 乐清市| 纳雍县| 望奎县| 天门市|