變量 | 內存中數據 | 內存地址 |
---|---|---|
name := "微客鳥窩" | 微客鳥窩 | 0xc00004e240 |
nameP := name | 0xc00004e240 | 0xc00004e360 |
從上面表格可以看到:
我們也可以使用 var 關鍵字聲明
var nameP *string nameP = name
nameP := new(string) nameP = name
可以傳遞類型給這個內置的 new 函數,它會返回對應的指針類型。
這里強調一下:
指針變量是一個變量,這個變量的值是指針(內存地址)!
指針變量是一個變量,這個變量的值是指針(內存地址)!
指針變量是一個變量,這個變量的值是指針(內存地址)!
獲取指針指向的值:
只需要在指針變量錢加 * 號即可獲得指針變量值所對應的數據:
nameV := *nameP fmt.Println("nameP指針指向的值為:",nameV) //nameP指針指向的值為: 微客鳥窩
修改指針指向的值:
*nameP = "腳本之家" //修改指針指向的值 fmt.Println("nameP指針指向的值為:",*nameP) fmt.Println("name變量的值為:",name) //運行結果: //nameP指針指向的值為: 腳本之家 //name變量的值為: 腳本之家
我們發現nameP 指針指向的值被改變了,變量 name 的值也被改變了
因為變量 name 存儲數據的內存就是指針 nameP 指向的內存,這塊內存被 nameP 修改后,變量 name 的值也被修改了。
通過 var 關鍵字直接定義的指針變量是不能進行賦值操作的,因為它的值為 nil,也就是還沒有指向的內存地址
//錯誤示例 var intP *int *intP = 10 //錯誤,應該先給分配一塊內存,內存地址作為變量 intP 的值,這個內存就可以存放 10 了。 //應該使用 var intP *int //聲明int類型的指針變量 intP intP = new(int) // 給指針分配一塊內存 *intP = 66 fmt.Println(":::",intP) //::: 0xc0000ac088 fmt.Println(*intP) //66 //簡短寫法 var intP := new(int) *intP=66
當給一個函數使用指針作為參數的時候,就可以在函數中,通過形參改變實參的值:
func main() { name := "無塵" modify(name) fmt.Println("name的值為:",name) } func modify(name *string) { *name = "wucs" } //運行結果: //name的值為: wucs
到此這篇關于Go語言應該什么情況使用指針的文章就介紹到這了,更多相關Go語言使用指針內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!