1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var a int =
  7. //每个变量都有两层含义,变量的内存和变量的地址
  8. fmt.Printf("a = %d\n", a) //变量的内存 10
  9. fmt.Printf("a = %v\n", &a) //变量的地址 0xc042060080
  10.  
  11. //保存某个变量的地址,需要指针类型, *int保存int的地址, **int保存*int的地址
  12. //声明(定义),定义只是特殊的声明
  13. //定义一个变量p,类型为*int
  14. var p *int
  15. p = &a
  16. fmt.Printf("p = %v, &a = %v\n", p, &a)
  17. *p = //*p操作的不是p的内存,是p指向的内存(其实就是a)
  18. fmt.Printf("*p = %v, a = %v\n", *p, a)
  19. }

执行结果为

  1. GOROOT=C:\Go #gosetup
  2. GOPATH=E:\go\develop #gosetup
  3. C:\Go\bin\go.exe build -i -o C:\Users\baylor\AppData\Local\Temp\___go_build__go.exe E:/awesomeProject01/指针的基本操作.go #gosetup
  4. "C:\Program Files\JetBrains\GoLand 2018.1.5\bin\runnerw.exe" C:\Users\baylor\AppData\Local\Temp\___go_build__go.exe #gosetup
  5. a =
  6. a = 0xc042060080
  7. p = 0xc042060080, &a = 0xc042060080
  8. *p = , a =

注意,永远不要操作没有合法指向的内存,比如:

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var p *int
  7. p = nil
  8. fmt.Printf("p = %v\n", p)
  9.  
  10. *p = //这个就是错误的,因为它没有正确的指向内存地址
  11. fmt.Printf("*p = %v\n", *p)
  12. }

执行结果

  1. GOROOT=C:\Go #gosetup
  2. GOPATH=E:\go\develop #gosetup
  3. C:\Go\bin\go.exe build -i -o C:\Users\baylor\AppData\Local\Temp\___go_build__go.exe E:/awesomeProject01/不要操作没有合法指向的内存.go #gosetup
  4. "C:\Program Files\JetBrains\GoLand 2018.1.5\bin\runnerw.exe" C:\Users\baylor\AppData\Local\Temp\___go_build__go.exe #gosetup
  5. p = <nil>
  6. panic: runtime error: invalid memory address or nil pointer dereference
  7. [signal 0xc0000005 code=0x1 addr=0x0 pc=0x48ce1c]
  8.  
  9. goroutine [running]:
  10. main.main()
  11. E:/awesomeProject01/不要操作没有合法指向的内存.go: +0x7c

正确的写法应该是这样的

  1. var a int
  2. p = &a
  3. *p =
  4. fmt.Printf("*p = %v\n", *p)

执行结果

  1. p = <nil>
  2. *p =

[GO]变量内存和变量地址的更多相关文章

  1. C语言结构体变量内存分配与地址对齐

    地址对齐简单来说就是为了提高访问内存的速度. 数组的地址分配比较简单,由于数据类型相同,地址对齐是一件自然而然的事情. 结构体由于存在不同基本数据类型的组合,所以地址对齐存在不同情况,但总体来说有以下 ...

  2. 07_Python变量内存地址、小数据池

    一.变量在内存中的地址 变量:用来标识(identify)一块内存区域.为了方便表示内存,我们操作变量实质上是在操作变量指向的那块内存单元.编译器负责分配.我们可以使用Python内建函数id()来获 ...

  3. C++变量内存分配及类型修饰符

    前言 了解C++程序内存分配,有助于深刻理解变量的初始化值以及其生存周期.另外,变量类型修饰符也会影响到变量的初始化值及其生存周期.掌握了不同类型变量的初始化值及其生存周期,能够让我们设计程序时定义变 ...

  4. js 作用域链&内存回收&变量&闭包

    闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等 一.作用域链:函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在 ...

  5. python初级 1 内存和变量

    一.回顾: 1.什么是程序 一堆指令的集合 2.回想一下猜数游戏程序的特征: 1)需要输入(input) 2)会处理输入(process) 3)产生输出(output) 二.程序的一般特征:输入.处理 ...

  6. c++中变量、变量名、变量地址、指针、引用等含义

    首先了解内存,内存就是一排房间,编号从0开始,0,1,2,3,4,5...... 房间里面一定要住人,新人住进去了,原来的人就走了:不管你住不住,里面都有人. 编号就是地址.里面的人就是内容,为了我们 ...

  7. js中数据、内存、变量的概念及三者之间的关系

    目录 数据.内存.变量的概念及三者之间的关系 什么是数据 数据的特点 什么是内存 栈内存 堆内存 JS引擎如何管理内存 什么是变量 变量是普通类型时 变量是引用类型时 数据.内存.变量的三者之间的关系 ...

  8. [c++] 内存与变量

    内存 程序代码区用来保存指令,常量区.全局数据区.堆.栈都用来保存数据 常量区和全局数据区有时也被合称为静态数据区,意思是这段内存专门用来保存数据,在程序运行期间一直存在 函数被调用时,会将参数.局部 ...

  9. python 中的变量内存以及关于is ==、 堆栈、

    在工作学习中会碰到一些python中变量与内存层面的问题理解,虽然是在不断的解决,但是并没有做过这方面的总结. 变量:用来标识(identify)一块内存区域.为了方便表示内存,我们操作变量实质上是在 ...

随机推荐

  1. C语言中的printf函数的输入输出问题

    这个问题是个很基础,但是我一直不知道的问题,是同学问了之后才知道的,长知识了. 这里要注意的是,printf函数是从右向左计算,从左向右输出. 距离如下: #include <stdio.h&g ...

  2. 常用FTP命令 1. 连接ftp服务器

    1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密码 ...

  3. Netty Client 重连实现

    当我们用Netty实现一个TCP client时,我们当然希望当连接断掉的时候Netty能够自动重连.Netty Client有两种情况下需要重连: Netty Client启动的时候需要重连 在程序 ...

  4. 1112 Stucked Keyboard

    题意:坏掉的键若被按下,总是重复打出k次.比如,k为3,打出的序列如下—— thiiis iiisss a teeeeeest 坏掉的键是i和e,虽然iiisss中s也出现了3次,但它不是坏掉的键,因 ...

  5. 二 mysql容量规划,性能测试

    何为基线- 当前运行状态记录.快照- 用于和未来的状态进行对比- 未来时刻产生关键事件后的新状态,作为下一个基线基线数据收集,关注哪些要点- 系统负载- MySQL运行状态- 相应的业务指标1.系统& ...

  6. [置顶] STM32的ADC1采集多条通道,可以不使用DMA功能吗?

    类似的问题 为什么我采集5条通道的电压,而采集到的值却都是第一条的呢? 我什么时候需要使用DMA功能? Ⅰ关于ADC的一些知识 STM32的ADC是一种12位逐次逼近型的模拟数字转换器.它有多达18条 ...

  7. Python Twisted系列教程7:小插曲,Deferred

    作者:dave@http://krondo.com/an-interlude-deferred/  译者:杨晓伟(采用意译) 你可以从这里从头开始阅读这个系列 回调函数的后序发展 在第六部分我们认识这 ...

  8. app端内容播放,web端的玩具,app通过websocket远程遥控玩具播放内容,玩具管理页面

    一.app端内容播放 下载代码 https://github.com/987334176/Intelligent_toy/archive/v1.0.zip 注意:由于涉及到版权问题,此附件没有图片和音 ...

  9. mysql忘记root密码的处理方法

    在linux下,如果忘记了mysql中root用户的密码可以采用以下办法解决. 1. 修改my.cnf,加入skip-grant-tables 修改mysql的配置文件my.cnf,在[mysqld] ...

  10. 如何搭建自己的SPRING INITIALIZR server

    这两天在慕课学Spring boot ,用idea通过spring initializr新建项目 即使用代理连不上.无奈. 参考了 GitHub - spring-io/initializr: A w ...