package main
import "fmt"
func main() {
//在计算机底层 a 这个变量其实对应了一个内存地址
// var a int = 10
// fmt.Printf("a的值:%v a的类型%T a的地址%p", a, a, &a) //a的值:10 a的类型int a的地址0xc0000100a8
// 指针也是一个变量,但它是一种特殊的变量,它存储的数据不是一个普通的值,而是另 一个变量的内存地址
// var a = 10
// var p = &a //p指针变量 p的类型 *int(指针类型)
// fmt.Printf("a的值:%v a的类型%T a的地址%p\n", a, a, &a)
// fmt.Printf("p的值:%v p的类型%T", p, p)
//每一个变量都有自己的内存地址
var a = 10
var p = &a //p指针变量 p的类型 *int(指针类型)
fmt.Printf("a的值:%v a的类型%T a的地址%p\n", a, a, &a)
fmt.Printf("p的值:%v p的类型%T p的地址%p", p, p, &p)
}
package main
import "fmt"
func main() {
a := 10
p := &a //p指针变量 类型 *int
// *p :表示取出p这个变量对应的内存地址的值
fmt.Println(p) //a的地址 0xc0000100a8
fmt.Println(*p) //*p 表示打印a对应的值 10
*p = 30 //改变p这个变量对应的内存地址的值
fmt.Println(a) //30
}
package main
import "fmt"
func fn1(x int) {
x = 10
}
func fn2(x *int) {
*x = 40
}
func main() {
var a = 5
fn1(a)
fmt.Println(a) //5
fn2(&a)
fmt.Println(a) //40
}
package main
import "fmt"
func main() {
// var userinfo map[string]string
// userinfo["username"] = "张三"
// fmt.Println(userinfo)
// var userinfo = make(map[string]string)
// userinfo["username"] = "张三"
// fmt.Println(userinfo)
// var a []int
// a[0] = 1
// fmt.Println(a)
// var a = make([]int, 4, 4)
// a[0] = 1
// fmt.Println(a)
var a *int //指针也是引用数据类型
*a = 100
fmt.Println(*a)
}
package main
import "fmt"
func main() {
// 实际想开发中 new 函数不太常用,使用 new 函数得到的是一个指类型针,并且该指针对应的值为该类型的零值
// var a = new(int) //a是一个指针变量 类型是 *int的指针类型 指针变量对应的值是0
// fmt.Printf("值:%v 类型:%T 指针变量对应的值:%v", a, a, *a) //值:0xc0000a0090 类型:*int 指针变量对应的值:0
/*
错误的写法
var a *int //指针也是引用数据类型
*a = 100
fmt.Println(*a)
*/
//new方法给指针变量分配存储空间
// var b *int
// b = new(int)
// *b = 100
// fmt.Println(*b) // fmt.Println(*a)
var f = new(bool)
fmt.Println(*f) //false
}