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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go:如何將 float32 指針轉(zhuǎn)換為 float64 指針

Go:如何將 float32 指針轉(zhuǎn)換為 float64 指針

Go
慕碼人2483693 2023-03-15 13:53:42
如何將 float32 指針轉(zhuǎn)換*float32為 float64 指針*float64。package mainimport "fmt"func main() {    var value *float32    v := float64(*value)    vp := &v    fmt.Println(vp)}以下代碼返回運(yùn)行時(shí)錯誤:無效的內(nèi)存地址或 nil 指針取消引用
查看完整描述

2 回答

?
慕萊塢森

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

您的代碼失敗的原因很簡單,就是您試圖取消引用尚未初始化的指針:


    var value *float32 

聲明一個指向 a 的指針float32,但不對其進(jìn)行初始化,從而得到一個nil指針。


    v := float64(*value)

然后嘗試取消引用value,但正如我們剛剛確定的那樣,value它nil沒有指向任何東西,因此詢問它指向的內(nèi)容必然會導(dǎo)致錯誤。


但是,您的代碼實(shí)際上很好,只要您有一個*float32實(shí)際上指向 a 的代碼float32,如果我們添加一個實(shí)際float32變量并初始化value以指向它,我們就可以看到它:


package main


import "fmt"


func main() {

    var vv float32 = 3.14159

    var value *float32 = &vv

    v := float64(*value)

    vp := &v

    fmt.Println(vp)

}

這將輸出值的地址float64。


但是,請注意 afloat64不僅僅是float32占用兩倍字節(jié)數(shù)的 a。精度和內(nèi)部表示不同,進(jìn)一步修改代碼可以看出:


func main() {

    var vv float32 = 3.14159

    var value *float32 = &vv

    v := float64(*value)

    fmt.Println(vv)

    fmt.Println(v)

}

您應(yīng)該看到類似于以下內(nèi)容的輸出:


3.14159

3.141590118408203

float64這不是錯誤,這是vs的不同內(nèi)部表示的結(jié)果float32。


無法保證這些不同類型中的值完全相同 - 每個類型都具有使某些值在字面上無法表示的特征,因此無法保證float32(v) == float64(v)每個v.


這也是為什么您不能簡單地對指針進(jìn)行類型轉(zhuǎn)換的原因:


    vp := *float64(value)

這是非法的,因?yàn)橹赶?a 的指針float64指向的東西與指向 a 的指針根本不同float32。


相比之下,您可以簡單地將 a 類型轉(zhuǎn)換*int32為 a *int64。


查看完整回答
反對 回復(fù) 2023-03-15
?
慕雪6442864

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

一種方法是編寫一個函數(shù)來安全地將 float32 指針轉(zhuǎn)換為 float64 指針。


package main


import "fmt"


func main() {

    var value *float32

    v := float32ToFloat64(value)

    fmt.Println(v)


    val := float32(1.2)

    p := float32ToFloat64(&val)

    fmt.Println(*p)

}


func float32ToFloat64(value *float32) *float64 {

    if value == nil {

        return nil

    }

    v := float64(*value)

    return &v

}


查看完整回答
反對 回復(fù) 2023-03-15
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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