1、指針的相關概念說明函數
- 變量:是基本類型,變量存的就是值,也叫值類型
- 地址:用於引用計算機的內存地址,可理解爲內存地址的標籤,通俗一點講就是一間房在小區裏的門牌號。以下圖①
- 指針:指針變量存的是一個地址,這個地址指向的空間存的纔是值(表示地址的指向,指針是一個指向另外一個變量內存地址的值)。以下圖②
- &:取地址符,例如:{指針}:=&{變量}。以下圖②
- * :取值符,例如:{變量}:=*{指針}。以下圖②
圖①spa
圖②3d
2、指針的使用案例指針
指針使用流程:code
- 定義指針變量。
- 爲指針變量賦值。
- 訪問指針變量中指向地址的值。
在指針類型前面加上 * 號(前綴)來獲取指針所指向的內容。blog
案例一ip
package main import "fmt" func main() { var a int= 10 /* 聲明實際變量 */ var ip *int /* 聲明指針變量 */ ip = &a /* 指針變量的存儲地址 */ fmt.Printf("a 變量的地址是: %x\n", &a ) /* 指針變量的存儲地址 */ fmt.Printf("ip 變量的存儲地址: %x\n", ip ) /* 使用指針訪問值 */ fmt.Printf("*ip 變量的值: %d\n", *ip ) }
a變量的地址是:0xc042052058 ip變量的存儲地址是0xc042052058 *ip變量的值是:10
案例二內存
package main import "fmt" // 咱們用兩個不一樣的例子來演示指針的用法 // zeroval函數有一個int類型參數,這個時候傳遞給函數的是變量的值 func zeroval(ival int) { ival = 0 } // zeroptr函數的參數是int類型指針,這個時候傳遞給函數的是變量的地址 // 在函數內部對這個地址所指向的變量的任何修改都會反映到原來的變量上。 func zeroptr(iptr *int) { *iptr = 0 } func main() { i := 1 fmt.Println("initial:", i) zeroval(i) fmt.Println("zeroval:", i) // &操做符用來取得i變量的地址 zeroptr(&i) fmt.Println("zeroptr:", i) // 指針類型也能夠輸出 fmt.Println("pointer:", &i) }
initial: 1 zeroval: 1 zeroptr: 0 pointer: 0xc042052058
空指針it
package main import ( "fmt" ) func main(){ //下面一行代碼註釋就是空指針,那麼值爲0 var a int = 1 var ip *int = &a fmt.Printf("ip的值爲:%x", ip) if (ip == nil) { fmt.Printf("是空指針") } else { fmt.Printf("非空指針") } }