[英]What's the meaning of '&i' when i := &b
我正在學習編程,我嘗試了'&'來獲取內存地址。但是我很想知道'&i'是什么意思,而'i'來自i:=&b,b是一個整數。
b := 7
i := &b
fmt.Println(&b) //print => 0xc000088000
fmt.Println(i) //print => 0xc000088000
fmt.Println(&i) //print => 0xc00000e018
在這種情況下,“&i”是什么意思?
&
是地址運算符 ,評估得出一個內存地址,該內存地址在傳遞給fmt
包時,通常以十六進制格式(“ base 16表示法,前導0x”)打印。
內存地址就是這樣:一個內存地址。 不管是int
變量或string
的地址,還是指針類型的變量的地址。 當打印時,它們看起來都“相同”。
地址運算符:
一個操作數
x
型的T
,寫入動作&x
生成類型的指針*T
到x
。
因此,地址運算符為您提供了一個指針值,當您取消引用時,該指針值將返回原始值。
&b
將是可變的地址b
,類型*int
,其中,當取消引用: *b
會給你(的值) b
。
&i
是**int
類型的變量i
的地址,當您取消引用時: *i
將為您提供i
的值, i
b
的地址。 因此,如果您還取消引用**(&i)
,那也將給您b
的值。
這里&b
返回的地址b
和相同的地址被存儲在i
。 由於i
也是變量,因此&i
將返回變量i的地址。
因此, &
運算符生成一個指向其操作數的指針。 因此&i
基本上會生成一個指向i
的指針,該指針已經是一個指向b
的指針,而b
只是內存地址。 所以,當你做fmt.Println(&i)
它打印的內存地址i
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.