package main

/*
%T 类型占位符
%v 值占位符
%p 地址(指针)占位符,只有地址才能替换%p
&value 对值取地址
*addr 对地址取值
**int 指向int型指针的指针
作用:函数传参时,传递指针叫引用传递,值传递是拷贝式的,对被传参数的修改是不会改变本体的,想要改变本体只能是引用传递
*/ import "fmt" //指针就是地址
//&value 对值取地址
//*ptr 对地址取值
func main021() { //声明变量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)//0x... //&a取变量a的地址
aPointer := &a
fmt.Printf("aPointer的类型是%T\n",aPointer)//*int //将aPointer指向的地址中的值修改为456
*aPointer = 456
fmt.Println("*aPointer=",*aPointer)//456
//a的值就变成了456
fmt.Println("a=",a)
} //先定义原始变量,修改其指针中的值,会直接改变原变量
//指针如果没有重新赋值,永远指向同一块地址
func main022() { //系统给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) //0xc042052080
fmt.Println(&x) //0xc042052080
fmt.Println(*xPtr) //789
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
fmt.Printf("y的地址是%p\n",&y) fmt.Println("----------")
//xPtr指向y的地址
xPtr = &y
y = 789
fmt.Println(x) //456
fmt.Println(y) //789
fmt.Println(*xPtr) //789
fmt.Println(&x == xPtr) //false
} //指针是严格检测数据类型的
func main023() {
var x = 123
var intPtr *int
intPtr = &x
fmt.Println(intPtr, *intPtr) //0x...,123 //var y = "你妹"
//intPtr = &y//编译错误,【整型指针】无法赋值为【字符串的地址】
} //指针的指针
func main024() {
var x = 123
var mPtr *int = &x //var mmp **int
mmPtr := &mPtr
fmt.Println(mmPtr)//0xc042072018
fmt.Printf("mmPtr的类型是%T\n",mmPtr)//mmPtr的类型是**int //打印x的值
fmt.Println(*mPtr)//123
fmt.Println(*(*mmPtr))//123
fmt.Println(**mmPtr)//123
} func main() {
//main021()
//main022()
//main023()
main024()
}

  

最新文章

  1. LVS_DR模式构建配置
  2. Fiddler环境配置教程
  3. android 入门-生命周期 activity
  4. 网页中插入FLASH(swf文件),并且让Flash不遮挡HTML元素
  5. Gradle学习
  6. C语言练习代码
  7. linux内核下载
  8. Maven解决Missing artifact com.sun:tools:jar:1.5.0错误
  9. 设计模式之:组合模式(Composite)
  10. Lua 笔记
  11. mybatis 应用参考
  12. iOS 8 之 新特性
  13. DOM操作和样式操作库的封装
  14. Think In Java_读书笔记_042516
  15. Oracle系列-锁表与解锁解决方案(基础版)
  16. MySQL数据库导入或者同步大量数据时数据丢失解决方案
  17. Anaconda spyder 设置tab键为2个空格
  18. 关于python中的GIL
  19. nlp资料网站
  20. python 打印堆栈信息方法

热门文章

  1. 1420. Build Array Where You Can Find The Maximum Exactly K Comparisons
  2. creating a table and inserting data
  3. 030- 控制语句if…else…
  4. 【网络协议】 TCP三次握手的流程
  5. 路由器逆向分析------MIPS交叉编译环境的搭建(Buildroot)
  6. Hook android系统调用研究(一)
  7. SQL注入,PreparedStatement和Statement
  8. 【转】Python调用C语言动态链接库
  9. Spring Cloud Alibaba(10)---Sentinel控制台搭建+整合SpringCloudAlibaba
  10. php中的一些碎的知识点