博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Golang指针用法
阅读量:3949 次
发布时间:2019-05-24

本文共 1238 字,大约阅读时间需要 4 分钟。

指针

简介:

  1. 基本数据类型,变量存的就是值,也叫值类型
  2. 获取变量的地址,用&,比如:var num int, 获取num的地址:&num
  3. 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
    比如:var ptr *int =&num
    举例说明:指针在内存的布局
  4. 获取指针类型所指向的值,使用:*,比如:var ptr *int,使用 *ptr获取ptr指向的值

如图:

指针说明

  • 代码演示
package mainimport "fmt"func main() {
// 2) 获取变量的地址,用&,比如:var num int, 获取num的地址:&num // 分析一下基本数据类型在内存的布局 var i int = 10 // i 的地址是什么, &i fmt.Println("i的地址=", &i) // 3) 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值 // 比如:var ptr *int =&num // 举例说明:指针在内存的布局 // 例如:var ptr *int = &i // 1、ptr 是一个指针变量 // 2、ptr 的类型 *int // 3、ptr 本身的值&i var ptr *int = &i fmt.Printf("ptr=%v\n", ptr) // 4) 获取指针类型所指向的值,使用:*,比如:var ptr *int,使用*ptr获取ptr指向的值 fmt.Printf("ptr 的地址=%v\n", &ptr) fmt.Printf("ptr 指向的值=%v", *ptr)}

定义指针变量: *指针变量名

取指针地址操作: &变量名
取值操作: *指针变量名(这里星号同定义指针变量操作,只不过两者不是一个东西,要注意区分)

  • 指针使用注意点:
  1. 值类型,都有对应的指针类型,形式为 *数据类型,比如 int 的对应值指正就是 *int,float32 对应的指针类型就是 *float32,以此类推
  2. 值类型包括:基本数据类型 int 系列,float 系列,bool,string、数组合结构体 strut
  • 扩展
    值类型和引用类型的使用特点
  1. 值类型:基本数据类型 int 系列,float 系列, bool,string、数组合结构体struct

    1. 值类型:变量直接存储值,内存通常在栈中分配
      例:var num = 100 ====> 内存(num–>100)
      值类型示意图
  2. 引用类型:指针、slice切片、map、管道chan、interface 等都是引用类型

    1. 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在堆上分配,
      当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收
      例:引用类型:ref ====> 内存(ref–>地址–>值)
      引用类型示意图
  3. 内存的栈区和堆区

    内存(栈区[值类型数据,通常是在栈区], 堆区[引用类型,通常在堆区分配空间])
    内存和栈区示意图

转载地址:http://lhqwi.baihongyu.com/

你可能感兴趣的文章
Android Package and Manifest File
查看>>
Creating Multiple APKs with 2+ Dimensions 创建两种以上屏幕尺寸多apk支持
查看>>
Abstracting the New APIs 抽象出新的API
查看>>
Proxying to the New APIs 代理新的API
查看>>
Creating an Implementation with Older APIs 用较早版本的APIs实现抽象类
查看>>
Using the Version-Aware Component 使用版本识别组件
查看>>
Enhancing Security with Device Management Policies 加强安全与设备管理策略 Developing for Enterprise
查看>>
Advertising without Compromising User Experience 不降低用户体验的广告
查看>>
Planning Screens and Their Relationships 规划屏幕和它们的关系
查看>>
Planning for Multiple Touchscreen Sizes 规划多个触摸屏尺寸
查看>>
Providing Descendant and Lateral Navigation 提供下一代和横向导航
查看>>
GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG解释 + 数据解析
查看>>
android如何使得电阻屏在第一次开机时自动叫起屏幕校准程序
查看>>
android如何实现:当开启图案解锁时,取消滑动解锁
查看>>
Providing Ancestral and Temporal Navigation 设计高效的应用导航
查看>>
Putting it All Together: Wireframing the Example App 把APP例子用线框图圈起来
查看>>
Implementing Lateral Navigation 实现横向导航
查看>>
Implementing Ancestral Navigation 实现原始导航
查看>>
Implementing Temporal Navigation 实现时间导航
查看>>
Responding to Touch Events 响应触摸事件
查看>>