package main
import "fmt"
//地址就是指针
//&value 对值取地址
//*ptr对地址取值
func main011() {
//声明变量a时,系统开辟了一块内存【地址】,里面存的【值】是123
var a int = 123
fmt.Printf("a的类型是%T\n",a)//int
fmt.Printf("a的值是%v\n",a)//123
fmt.Printf("a的地址是%p\n", &a)//Ox...
//&a取变量a的地址
aPointer :=&a
fmt.Printf("aPointer的类型是%T\n",aPointer)//int
//将aPointer指向地址中的值修改为456
*aPointer = 456
//a的值就变成了456
fmt.Println("a=",a)
}
func main04() {
//系统给x分配了内存
var x = 456
fmt.Println(x)//456
//定义整型指针 (存储整型数据的地址)
//默认赋值为空<nil>
var xPtr *int
fmt.Println("xPtr=",xPtr)//nil
//aPtr指向x的值
xPtr = &x
//将xPtr指向的地址中的值修改为789
*xPtr = 789
fmt.Println(x) //789
fmt.Println(xPtr) //0xc0420080
fmt.Println(&x) //0xc0420080
fmt.Println(*xPtr == x) //true
fmt.Println(xPtr == &x) //true
var y = 456
*xPtr = y
fmt.Println(x) //456
fmt.Println(xPtr) //没有变
fmt.Println(&x) //没有变
fmt.Println(*xPtr) //456
fmt.Println(*xPtr == y) //true
fmt.Println(x == y) //true
fmt.Println(&x == &y) //false
fmt.Println(xPtr == &y) //false
//xprt指向y的地址
xPtr = &y
y = 789
fmt.Println(x) //456
fmt.Println(y) //789
fmt.Println(*xPtr) //789
fmt.Println(&x == xPtr) //false
}
//指针是严格检查数据类型的
func main045() {
var x =123
var intPtr *int
intPtr = &x
fmt.Println(intPtr,*intPtr) //0x...,123
//var y = "你妹"
// intPtr = &y //编译错误,【整型指针】无法赋值为【字符串的地址】
}
网友评论