golang面試題:能說說uintptr和unsafe.Pointer的區(qū)別嗎?

image

問題

能說說uintptr和unsafe.Pointer的區(qū)別嗎耘眨?

怎么答

  • unsafe.Pointer只是單純的通用指針類型,用于轉(zhuǎn)換不同類型指針境肾,它不可以參與指針運(yùn)算剔难;
  • 而uintptr是用于指針運(yùn)算的,GC 不把 uintptr 當(dāng)指針奥喻,也就是說 uintptr 無法持有對象偶宫, uintptr 類型的目標(biāo)會被回收;
  • unsafe.Pointer 可以和 普通指針 進(jìn)行相互轉(zhuǎn)換环鲤;
  • unsafe.Pointer 可以和 uintptr 進(jìn)行相互轉(zhuǎn)換纯趋。

舉例

  • 通過一個(gè)例子加深理解,接下來嘗試用指針的方式給結(jié)構(gòu)體賦值冷离。
package main

import (
    "fmt"
    "unsafe"
)

type W struct {
    b int32
    c int64
}

func main() {
    var w *W = new(W)
    //這時(shí)w的變量打印出來都是默認(rèn)值0吵冒,0
    fmt.Println(w.b,w.c)

    //現(xiàn)在我們通過指針運(yùn)算給b變量賦值為10
    b := unsafe.Pointer(uintptr(unsafe.Pointer(w)) + unsafe.Offsetof(w.b))
    *((*int)(b)) = 10
    //此時(shí)結(jié)果就變成了10,0
    fmt.Println(w.b,w.c)
}
  • uintptr(unsafe.Pointer(w)) 獲取了 w 的指針起始值
  • unsafe.Offsetof(w.b) 獲取 b 變量的偏移量
  • 兩個(gè)相加就得到了 b地址值西剥,將通用指針 Pointer 轉(zhuǎn)換成具體指針 ((*int)(b))痹栖,通過 * 符號取值,然后賦值瞭空。*((*int)(b)) 相當(dāng)于把 (*int)(b) 轉(zhuǎn)換成 int 了揪阿,最后對變量重新賦值成 10,這樣指針運(yùn)算就完成了咆畏。
如果喜歡我的文章南捂,可關(guān)注我的公眾號:golang小白成長記
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旧找,隨后出現(xiàn)的幾起案子溺健,更是在濱河造成了極大的恐慌,老刑警劉巖钮蛛,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矿瘦,死亡現(xiàn)場離奇詭異枕面,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)缚去,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門潮秘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人易结,你說我怎么就攤上這事枕荞。” “怎么了搞动?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵躏精,是天一觀的道長。 經(jīng)常有香客問我鹦肿,道長矗烛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任箩溃,我火速辦了婚禮瞭吃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涣旨。我一直安慰自己歪架,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布霹陡。 她就那樣靜靜地躺著和蚪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烹棉。 梳的紋絲不亂的頭發(fā)上攒霹,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天,我揣著相機(jī)與錄音浆洗,去河邊找鬼剔蹋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辅髓,可吹牛的內(nèi)容都是我干的泣崩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼洛口,長吁一口氣:“原來是場噩夢啊……” “哼矫付!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起第焰,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤买优,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杀赢,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡烘跺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脂崔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滤淳。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖砌左,靈堂內(nèi)的尸體忽然破棺而出脖咐,到底是詐尸還是另有隱情,我是刑警寧澤汇歹,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布屁擅,位于F島的核電站,受9級特大地震影響产弹,放射性物質(zhì)發(fā)生泄漏派歌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一痰哨、第九天 我趴在偏房一處隱蔽的房頂上張望胶果。 院中可真熱鬧,春花似錦作谭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吼过,卻和暖如春锐秦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盗忱。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工酱床, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趟佃。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓扇谣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親闲昭。 傳聞我的和親對象是個(gè)殘疾皇子罐寨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350