Golang指针类型
//Go语言的基本类型有:
//bool
//string
//int、int8、int16、int32、int64
//uint、uint8、uint16、uint32、uint64、uintptr
//byte // uint8 的别名
//rune // int32 的别名 代表一个 Unicode 码
//float32、float64
//complex64、complex128
//整型和浮点型变量的默认值为 0 和 0.0。
//字符串变量的默认值为空字符串。
//布尔型变量默认为 bool。
//切片、函数、指针变量的默认为 nil。
#####################################################################################
//指针类型
var a int
a = 0
fmt.Println(&a) //0xc042008230
######################################################################################
var a int
a = 10
var p *int
p = &a
fmt.Printf("变量a的地址:%x\n", &a) //变量a的地址:c042008190
fmt.Printf("指针类型p指向a地址的值:%x\n", p) //指针类型p指向a地址的值:c042008190
fmt.Printf("指针类型p获取指针变量的值: %d\n", *p) //指针p获取指针变量指向变量的值:10
######################################################################################
var p *int
fmt.Println(p) //<nil>
fmt.Printf("p的值%x\n", p) //p的值0
if p != nil {
fmt.Println("非空")
} else {
fmt.Println("空")
} //空
##############################################################################################
package main
import "fmt"
func swap(a, b *int) {
a, b = b, a
fmt.Println(*a, *b)//20,10
}
func main() {
a, b := 10, 20
fmt.Println(a, b) //10,20
swap(&a, &b)
fmt.Println(a, b) //10,20
}
###############################################################################################
package main
import "fmt"
func swap(a, b *int) {
*a, *b = *b, *a
fmt.Println(*a, *b) //20,10
}
func main() {
a, b := 10, 20
fmt.Println(a, b) //10,20
swap(&a, &b)
fmt.Println(a, b) //20,10
}
################################################################################################
func swap(a, b *int) (*int, *int) {
a, b = b, a
return a, b
}
func main() {
a, b := 10, 20
fmt.Println(a, b) //10,20
fmt.Println(&a, &b) //0xc042008190 0xc042008198
c, d := swap(&a, &b)
fmt.Println(*c, *d) //20,10
fmt.Println(&a, &b) //0xc042008190 0xc042008198
fmt.Println(*d) //10
a = *c
fmt.Println(*d) //20
b = *d
fmt.Println(a, b) //20,20
}
################################################################################################
func swap(a, b *int) (*int, *int) {
a, b = b, a
return a, b
}
func main() {
a, b := 10, 20
fmt.Println(a, b) //10,20
fmt.Println(&a, &b) //0xc042008190 0xc042008198
c, d := swap(&a, &b)
fmt.Println(*c, *d) //20,10
fmt.Println(&a, &b) //0xc042008190 0xc042008198
fmt.Println(*d) //10
//a = *c
fmt.Println(*d) //20
b = *d
fmt.Println(a, b) //10,10
}
################################################################################################