先放一段**,人工執行一下,看看自己能做對幾題?
package main
import "fmt"
func main()
*
符號的意思是對指標取值,如:*&a
,就是a
變數所在位址的值,當然也就是a
的值了
*
和&
可以互相抵消,同時注意,*&
可以抵消掉,但&*
是不可以抵消的
a
和*&a
是一樣的,都是a的值,值為1 (因為*&
互相抵消掉了)
同理,a
和*&*&*&*&a
是一樣的,都是1 (因為4個*&
互相抵消掉了)
因為有var b *int = &a
所以a
和*&a
和*b
是一樣的,都是a的值,值為1 (把b
當做&a
看)
因為有var c **int = &b
所以**c
和**&b
是一樣的,把&約去後
會發現**c
和`b是一樣的 (從這裡也不難看出,
c和
b也是一樣的) 又因為上面得到的
&a和
b是一樣的 所以
**c和
&a是一樣的,再次把*&約去後
**c和
a`是一樣的,都是1
不信你試試?
執行的結果內的位址值(0xc200開頭的)可能會因不同機器執行而不同,***
$ go run main.go
a = 1
&a = 0xc200000018 *&a = 1 b = 0xc200000018 &b = 0xc200000020 *&b = 0xc200000018 *b = 1 c = 0xc200000020 *c = 0xc200000018 &c = 0xc200000028 *&c = 0xc200000020 **c = 1 ***&*&*&*&c = 1 x = 1
*&
可以在任何時間抵消掉,但&*
不可以被抵消的,因為順序不對
fmt.println("*&a\t=\t",*&a) //成功抵消掉,列印出1,即a的值 fmt.println("&*a\t=\t",&*a) //無法抵消,會報錯
Go 語言指標
b 什麼是指標 b 乙個指標變數指向了乙個值的記憶體位址。類似於變數和常量,在使用指標前你需要宣告指標。指標宣告格式如下 var var name var type var type 為指標型別,var name 為指標變數名,號用於指定變數是作為乙個指標。以下是有效的指標宣告 var ip int...
GO語言指標
以前學習的語言裡沒有指標操作,剛接觸到go語言指標,消化的比較慢,故寫一下。指標型別宣告 t,指標的型別為 t,例 var i int 指標型別的值 t 在等號左邊表示指標宣告var a int 32 p a p的值是指向a的位址在指標前加 獲取指標p指向的值,例 var a int 32 變數宣告...
Go語言指標
鏈客,專為開發者而生,有問必答!接下來讓我們來一步步學習 go 語言指標。我們都知道,變數是一種使用方便的佔位符,用於引用計算機記憶體位址。go 語言的取位址符是 放到乙個變數前使用就會返回相應變數的記憶體位址。package mainimport fmt func main 以上例項執行輸出結果為...