欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言中的指針運(yùn)算實(shí)例分析

 更新時(shí)間:2015年02月26日 15:44:52   作者:不是JS  
這篇文章主要介紹了Go語(yǔ)言中的指針運(yùn)算技巧,實(shí)例分析了Go語(yǔ)言指針運(yùn)算的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例分析了Go語(yǔ)言中的指針運(yùn)算方法。分享給大家供大家參考。具體分析如下:

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

這里對(duì)Go語(yǔ)言?xún)?nèi)置的unsafe模塊做了一個(gè)實(shí)驗(yàn),發(fā)現(xiàn)通過(guò)unsafe模塊,Go語(yǔ)言一樣可以做指針運(yùn)算,只是比C的方式繁瑣一些,但是理解上是一樣的。

下面是實(shí)驗(yàn)代碼:

復(fù)制代碼 代碼如下:
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))))
}

以上代碼在我機(jī)器上的執(zhí)行結(jié)果如下(結(jié)果會(huì)因機(jī)器和系統(tǒng)的不同而不太一樣):
32
----
1
4
8
4
----
0
4
8
24
----
32
----
98
77
1234567890abcdef
23

unsafe模塊的文檔中提到幾條轉(zhuǎn)換規(guī)則,理解了以后就很容易做指針運(yùn)算了:

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.

希望本文所述對(duì)大家的Go語(yǔ)言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • GoLand編寫(xiě) TCP 端口掃描器的詳細(xì)過(guò)程

    GoLand編寫(xiě) TCP 端口掃描器的詳細(xì)過(guò)程

    TCP,也就是傳輸控制協(xié)議(Transmission Control Protocol),這篇文章主要介紹了Go語(yǔ)言(Golang)編寫(xiě) TCP 端口掃描器,需要的朋友可以參考下
    2023-05-05
  • Golang壓縮Jpeg圖片和PNG圖片的操作

    Golang壓縮Jpeg圖片和PNG圖片的操作

    這篇文章主要介紹了Golang壓縮Jpeg圖片和PNG圖片的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go+Lua解決Redis秒殺中庫(kù)存與超賣(mài)問(wèn)題

    Go+Lua解決Redis秒殺中庫(kù)存與超賣(mài)問(wèn)題

    本文主要介紹了Go+Lua解決Redis秒殺中庫(kù)存與超賣(mài)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go?語(yǔ)言進(jìn)階單元測(cè)試示例詳解

    Go?語(yǔ)言進(jìn)階單元測(cè)試示例詳解

    這篇文章主要為大家介紹了Go?語(yǔ)言進(jìn)階單元測(cè)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go錯(cuò)誤和異常CGO?fallthrough處理教程詳解

    Go錯(cuò)誤和異常CGO?fallthrough處理教程詳解

    這篇文章主要為大家介紹了Go錯(cuò)誤和異常CGO?fallthrough使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • go語(yǔ)言標(biāo)準(zhǔn)庫(kù)fmt包的一鍵入門(mén)

    go語(yǔ)言標(biāo)準(zhǔn)庫(kù)fmt包的一鍵入門(mén)

    這篇文章主要為大家介紹了go語(yǔ)言標(biāo)準(zhǔn)庫(kù)fmt包的一鍵入門(mén)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 詳解Go 1.22 for循環(huán)的兩處重要更新

    詳解Go 1.22 for循環(huán)的兩處重要更新

    這篇文章主要詳細(xì)介紹了Go 1.22 for循環(huán)的兩處重要更新,Go 1.22 版本于 2024 年 2 月 6 日發(fā)布,引入了幾個(gè)重要的特性和改進(jìn),在語(yǔ)言層面上,這個(gè)版本對(duì) for 循環(huán)進(jìn)行了兩處更新,本文將會(huì)對(duì) for 循環(huán)的兩個(gè)更新進(jìn)行介紹,需要的朋友可以參考下
    2024-02-02
  • 淺談Go1.18中的泛型編程

    淺談Go1.18中的泛型編程

    本文主要介紹了Go1.18中的泛型編程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go語(yǔ)言--切片(Slice)詳解

    Go語(yǔ)言--切片(Slice)詳解

    這篇文章主要介紹了Go語(yǔ)言--切片(Slice),Go 語(yǔ)言切片是對(duì)數(shù)組的抽象,下面文章小編將為大家詳細(xì)介紹該內(nèi)容,需要的朋友可以參考下,希望對(duì)你有所幫助
    2021-10-10
  • Golang Printf,Sprintf,Fprintf 格式化詳解

    Golang Printf,Sprintf,Fprintf 格式化詳解

    這篇文章主要介紹了Golang Printf,Sprintf,Fprintf 格式化詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03

最新評(píng)論