//指针的初步认识
package main
import "fmt"
func main() {
a := 10
fmt.Printf("变量a的地址 %x \n",&a)
b := []int{1,3,4,6,7,9}
fmt.Printf("变量b的地址 %x \n",&b)
}
指针不能运算
package main
import "fmt"
func main() {
//定义实际变量
a := 120
//声明指针变量
var ip *int
//给指针变量ip复制
ip = &a
//打印a的类型和值
fmt.Printf("a 的类型 %T 值是%v \n",a,a)
//打印&a的类型和值
fmt.Printf("&a 的类型 %T 值是%v \n",&a,&a)
//打印ip的类型和值
fmt.Printf("ip 的类型 %T 值是%v \n",ip,ip)
//打印*ip的类型和值 添加*号获取该内存地址里的值
fmt.Printf("*ip 的类型 %T 值是%v \n",*ip,*ip)
//打印*ip的类型和值 添加*号获取该内存地址里的值
fmt.Printf("*&a 的类型 %T 值是%v \n",*&a,*&a)
}
符合数据类型指针以及空指针
package main
import "fmt"
//定义复合数据类型
type Student struct{
name string
age int
married bool
sex int8
}
func main() {
//使用复合数据类型
s1 :=Student{"Steven",30,true,1}
s2 :=Student{"Sunny",25,false,0}
var a *Student = &s1
var b *Student = &s2
//打印s1的类型和值
fmt.Printf("s1 的类型 %T 值是%v \n",s1,s1)
//打印s2的类型和值
fmt.Printf("s2 的类型 %T 值是%v \n",s2,s2)
//打印&s1的类型和值
fmt.Printf("&s1 的类型 %T 值是%v \n",&s1,&s1)
//打印&s2的类型和值
fmt.Printf("&s2 的类型 %T 值是%v \n",&s2,&s2)
//打印a的类型和值
fmt.Printf("a 的类型 %T 值是%v \n",a,a)
//打印b的类型和值
fmt.Printf("b 的类型 %T 值是%v \n",b,b)
//打印*a的类型和值
fmt.Printf("a 的类型 %T 值是%v \n",*a,*a)
//打印*b的类型和值
fmt.Printf("b 的类型 %T 值是%v \n",*b,*b)
//打印&*a的类型和值
fmt.Printf("&*a 的类型 %T 值是%v \n",&*a,&*a)
//打印&*b的类型和值
fmt.Printf("&*b 的类型 %T 值是%v \n",&*b,&*b)
//打印&a的类型和值
fmt.Println(&a.name,&a.age,&a.married,a.sex)
}
空指针