在下面的代碼中,兩個指標變數r1和r2(型別*Rect)參考相同的結構物件(型別Rect):
type Rect struct {
width int
}
func main() {
r1 := new(Rect)
r2 := new(Rect)
r1 = r2
fmt.Printf("%p, %p", r1, r2) // prints the addresses of the Rects being pointed to by each variable
}
0xc00001c038, 0xc00001c038 (良好的輸出)
您將如何從定義它們的函式外部參考r1和指向同一個結構物件?r2換句話說,你將如何創建一個函式來替換r1 = r2?r1我嘗試取消參考然后從外部函式中分配變數在參考的r2參考結構物件時沒有成功:
func assign(r1, r2 *Rect) {
*r1 = *r2
}
func main() {
r1 := new(Rect)
r2 := new(Rect)
assign(r1, r2)
fmt.Printf("%p, %p", r1, r2) // prints the addresses of the Rects being pointed to by each variable
}
0xc00001c030, 0xc00001c038 (輸出不良)
游樂場: https ://go.dev/play/p/ld0C5Bkmxo3
uj5u.com熱心網友回復:
如果您需要更改函式中指標指向的位置,則必須傳遞它的地址:
func assign(r1, r2 **Rect) {
*r1 = *r2
}
func main() {
r1 := new(Rect)
r2 := new(Rect)
assign(&r1, &r2)
fmt.Printf("%p, %p", r1, r2) // prints the addresses of the Rects being pointed to by each variable
}
游樂場: https ://go.dev/play/p/5fAakjB50JJ
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512033.html
標籤:去目的指针记忆结构
