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

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

Go:將 unsafe.Pointer 轉(zhuǎn)換為函數(shù)指針,反之亦然

Go:將 unsafe.Pointer 轉(zhuǎn)換為函數(shù)指針,反之亦然

Go
蕪湖不蕪 2021-07-28 18:51:40
在 C 中,您可以將函數(shù)指針?lè)湃肟罩羔様?shù)組中,然后將它們轉(zhuǎn)換回任何類型的函數(shù)指針:extern int (*fn1)(void);extern void (*fn2)(int);void foo(void){        void *array[2];        int i;        /* implicit cast from function pointer to void pointer */        array[0] = fn1;        array[1] = fn2;        for (i = 0; i < 2; i++)        {                int (*fp)(int, int, int);                /* implicit cast from void pointer to function pointer */                fp = array[i];                /* call function with a different signature */                fp(1, 2, 3);        }}我需要在 Go 中做同樣的事情,使用 unsafe.Pointers。問(wèn)題是:Go 函數(shù)指針可以轉(zhuǎn)換為 unsafe.Pointer 嗎?unsafe.Pointer 可以轉(zhuǎn)換為與原始函數(shù)指針不同(或相同)類型的 Go 函數(shù)指針嗎?(問(wèn)題不是我為什么或是否需要這樣做;在給定的情況下,可以使用錯(cuò)誤的參數(shù)集調(diào)用函數(shù)并誤解返回值,因?yàn)檎{(diào)用者和被調(diào)用者能夠處理這種情況。 )
查看完整描述

2 回答

?
慕田峪7331174

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

正如 LinearZoetrope 的回答所示,您可以這樣做。當(dāng)心你可以做壞事:


package main


import (

    "fmt"

    "unsafe"

)


func main() {

    f1 := func(s string) {}

    f2 := func(i int) int { return i + 1 }

    pointers := []unsafe.Pointer{

        unsafe.Pointer(&f1),

        unsafe.Pointer(&f2),

    }

    f3 := (*func(int) bool)(pointers[1]) // note, not int

    fmt.Println((*f3)(1))

}


查看完整回答
反對(duì) 回復(fù) 2021-08-02
?
躍然一笑

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

它似乎有效:


package main


import (

    "fmt"

    "unsafe"


    "math"

)


func main() {

    fn := print

    faked := *(*func(float64))(unsafe.Pointer(&fn))

    faked(1.0)


    // For comparison

    num := math.Float64bits(1.0)

    print(num)

}


func print(a uint64) {

    fmt.Println(a)

}

會(huì)打印


4607182418800017408


4607182418800017408


當(dāng)然,您可能很清楚嘗試這樣做的潛在問(wèn)題。


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

添加回答

舉報(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)