package mainimport "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 mainimport "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 mainimport "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 mainimport "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 mainimport "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}