第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Go 中的指針運(yùn)算

Go 中的指針運(yùn)算

Go
拉丁的傳說(shuō) 2021-11-08 16:55:38
考慮到你可以(想不出一個(gè)很好的方法來(lái)放置它,但是)在 Go 中操作指針,是否有可能像在 C 中那樣執(zhí)行指針?biāo)阈g(shù),比如迭代數(shù)組?我知道現(xiàn)在循環(huán)適用于那種事情,但我只是好奇是否可能。
查看完整描述

2 回答

?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

不。來(lái)自Go FAQ:


為什么沒(méi)有指針?biāo)惴ǎ?/p>

安全。如果沒(méi)有指針?biāo)阈g(shù),就有可能創(chuàng)建一種永遠(yuǎn)無(wú)法派生出錯(cuò)誤成功的非法地址的語(yǔ)言。編譯器和硬件技術(shù)已經(jīng)發(fā)展到使用數(shù)組索引的循環(huán)可以與使用指針?biāo)惴ǖ难h(huán)一樣高效。此外,缺乏指針?biāo)惴梢院?jiǎn)化垃圾收集器的實(shí)現(xiàn)。


話雖如此,您可以通過(guò)使用該unsafe包來(lái)解決這個(gè)問(wèn)題,但不要這樣做:


package main


import "fmt"

import "unsafe"


func main() {

    vals := []int{10, 20, 30, 40}

    start := unsafe.Pointer(&vals[0])

    size := unsafe.Sizeof(int(0))

    for i := 0; i < len(vals); i++ {

        item := *(*int)(unsafe.Pointer(uintptr(start) + size*uintptr(i)))

        fmt.Println(item)

    }

}

https://play.golang.org/p/QCHEQqy6Lg


查看完整回答
反對(duì) 回復(fù) 2021-11-08
?
楊魅力

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊

從 Go 1.17 開(kāi)始,我們現(xiàn)在有了unsafe.Add,這讓它變得更容易了:


package main


import (

    "unsafe"

)


func main() {

    vals := []int{10, 20, 30, 40}


    ptrStart := unsafe.Pointer(&vals[0])

    itemSize := unsafe.Sizeof(vals[0])


    for i := 0; i < len(vals); i++ {

        item := *(*int)(unsafe.Add(ptrStart, uintptr(i)*itemSize))

        println(item)

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-11-08
  • 2 回答
  • 0 關(guān)注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)