指针

进制转换

二进制 10  11  100    ...  1001    1010    1011    1100                                                          
十进制 0 1 2 3 4  ... 9 10 11 12  15  16 17 18 25 29      
十六进制 0 1 2 3 4  ... 9 A B C F 0x10 0x11 0x12 0x19 0x1A      

指针

/*
指针就是地址
每个页上都有指针和页数据 指针其实就是记录数据的 数据头,就像每个屋子都有一个门牌号一样。 指针可以套指针,别管怎么指,最终还会到最初的页数据那去。 如果是int 类型的数据 那么这个指针就是 *int 类型的指针。
*/
 1 /*
 2 &value 对数值 取地址
 3 *ptr   对地址 取数值
 4 
 5 */
 6 package main
 7 
 8 import (
 9  "fmt"
10 )
11 
12 func main(){
13  var a int = 123
14  fmt.Printf("a的类型是%T
",a) //int
15  fmt.Printf("a的数值是%v
",a) //123
16  fmt.Printf("a的地址是%p
",&a) //0x...
17 
18 
19 
20  //修改a地址
21  //&a地址存在 apointer变量中   【这个代表 对数值取地址】
22  apointer :=&a
23  fmt.Printf("apinrter的类型是%T
",apointer) //*int
24 
25 //将456丢入a的地址中   【这个代表 对地址 取数值】
26 *apointer =456
27 fmt.Println(*apointer)  //456
28 //a也变成了456
29  fmt.Println(a)  //456
30  }
 1 package main
 2 
 3 import "fmt"
 4 
 5 func main(){
 6  var x = 456
 7 
 8  //定义整型指针(存储整型数据的地址),默认赋值为空nil
 9  var xx *int
10 
11  //xx指向x的地址
12  xx = &x
13 
14  //将xx指向的地址中的数值 改为 789
15  *xx = 789
16 
17  fmt.Println(*xx)         //xx地址中的数值是 789
18  fmt.Println(&x)          //x的地址内容是0xc00004c080
19  fmt.Println(x)            //x的数值是789
20  fmt.Println(*xx==x)    //xx地址中的数值= x的数值  true
21  fmt.Println(xx ==&x)    //xx指针变量的数值= x地址的内容。true
22 }

指针的指针

/*
专门一个地址里 存储的内容是 另外一个指针的地址。
那么这个地址就叫指针的指针。

比如
a <-- b的值是a的指针<-----C的值是b的指针
*c  = 取c的数值 也就是b的指针地址
**c = 取c的数值 在继续取b的数值  也就是a的值。


 */
 1 package main
 2 
 3 import "fmt"
 4 
 5 func main(){
 6     var x = 123
 7     var p *int = &x  //x的指针给p        
 8     pp := &p         //在把p的指针给pp  <----- 指针的指针
 9 
10     fmt.Println(pp)  //0xc000006028
11 
12     fmt.Println(*p)             //123
13     fmt.Println(*(*pp))        //123
14     fmt.Println(**pp)        //123
15 
16 
17 }
原文地址:https://www.cnblogs.com/chaoyangxu/p/11842187.html