Go語言指針
Go語言指針
基本數據類型:變量存的是值,也叫值類型
Go 語言的取地址符是 &,放到一個變量前使用就會返回相應變量的內存地址。
取值符的操作(&)
package main
import "fmt"
/* 指針的使用 */
func main() {
var a int = 10
fmt.Printf("a of address:%v\n", &a)
fmt.Printf("a of address:%d\n", &a)
fmt.Printf("a of address:%b\n", &a)
fmt.Printf("a of address:%o\n", &a)
fmt.Printf("a of address:%x\n", &a)
}
指針的基本用法
package main
import "fmt"
func main() {
var a int = 9
var point * int //定義一個變量
point = &a //將指針指向a的地址變量
fmt.Printf("point指向的地址:%v\n", point)
fmt.Printf("point指向的地址的在值:%v\n", * point)
fmt.Printf("a:的值:%d\n", a)
}
Go 空指針
當一個指針被定義后沒有分配到任何變量時,它的值為 nil。
nil 指針也稱為空指針。
nil在概念上和其它語言的null、None、nil、NULL一樣,都指代零值或空值。
一個指針變量通??s寫為 ptr。
package main
import "fmt"
func main() {
var pointNull * int; //定義一個空指針
fmt.Printf("pointNull的值:%v\n", pointNull)
fmt.Printf("pointNull的值:%d\n", pointNull)
}
Go指針數組
package main
import "fmt"
func main() {
var arrayPoint = [] int{1,2,3,4,5,8,7} //定義一個數組
var StringArrays = [] string{"zhangsan","lisi","liuliu","qiqi"} //定義一個字符數組
var pointInt *[] int = &arrayPoint; //將整形指針指向第一個數組
var pointString *[] string = &StringArrays //將字符指針指向第一個字符數組
fmt.Printf("第一個數組的首地址的值:%v\n", *pointInt)
fmt.Printf("第一個數組的首地址:%v\n", &pointInt)
fmt.Printf("第一個字符的首地址的值:%v\n", *pointString)
fmt.Printf("第一個字符的首地址:%v\n", &pointString)
ForEach(*pointInt)
ForEach(*pointString)
}
/* 遍歷的泛型函數 */
func ForEach[T comparable] (Array[] T)(){
for key, value := range Array {
fmt.Printf("第%d個值:%v\n", key,value)
}
}
Go 語言指針作為函數參數
package main
import "fmt"
/* 將指針作為函數的參數 */
func main() {
a:=1
b:=2
fmt.Printf("a:%v,b:%v\n", a,b)
Swith(&a,&b)
fmt.Printf("a:%v,b:%v\n", a,b)
}
/** 引用傳遞的實現 **/
func Swith[T comparable ](a * T,b * T)() {
var temp T;
temp = *a
*a = *b
*b = temp
}
Go語言中雙重指針
定義一個雙重指針
package main
import "fmt"
/* 雙重指針 */
func main() {
var DoublePoint **int //定義一個雙重指針
var SingerPoint *int
var Value int = 500
SingerPoint = &Value //將value賦值給指針
DoublePoint = &SingerPoint //將單重指針指向雙重指針
fmt.Printf("Value的地址:%v\n", &Value)
fmt.Printf("Value的值:%v\n", Value)
fmt.Printf("************************************\n")
fmt.Printf("SingerPoint的地址:%v\n", &SingerPoint)
fmt.Printf("SingerPoint的地址:%v\n", SingerPoint)
fmt.Printf("SingerPoint的值:%v\n", *SingerPoint)
fmt.Printf("************************************\n")
fmt.Printf("DoublePoint 的地址:%v\n", &DoublePoint )
fmt.Printf("DoublePoint 的單重指針值:%v\n", *DoublePoint )
fmt.Printf("DoublePoint 的值:%v\n", **DoublePoint )
}
浙公網安備 33010602011771號