func pointer_test() {
//空指针,输出为nil
var p *int
fmt.Printf("p: %v\n", p)
//指向局部变量,变量值初始为0
var i int
p = &i
fmt.Printf("p: %v,%v\n", p, *p)
//通过指针修改变量数值
*p =
fmt.Printf("p: %v,%v\n", p, *p)
//数组的初始化及输出
m := []int{, , }
fmt.Printf("m:%v--%v,%v,%v\n", m, m[], m[], m[])
//指针数组的初始化及输出
//j, k, l := 3, 4, 5
//x := [3]*int{&j, &k, &l}
x := []*int{&m[], &m[], &m[]}
fmt.Printf("x:%v,%v,%v\n", x[], x[], x[])
fmt.Printf("*x:%v,%v,%v\n", *x[], *x[], *x[]) var n []*int
n = x
fmt.Printf("n:%v,%v,%v\n", n[], n[], n[])
//指向数组的指针,也即二级指针的使用
y := []*[]*int{&x}
fmt.Printf("y:%v,%v\n", y, y[])
fmt.Printf("*y[0]:%v\n", *y[])
fmt.Printf("*y[][]:%v,%v,%v\n", *y[][], *y[][], *y[][])
/*
*X -> v
[3]X -> [v0][v1][v2]
[]X -> [v0]...[vi]
[3]*X -> [p0][p1][p2]
| | |
j k l
[]*[3]*X -> [n0]...[ni]
| ... |
[p0]->j
[p1]->k
[p2]->l
*/
} type Student struct {
name string
id int
score uint
} func memery_test() {
//new分配出来的数据是指针形式
p := new(Student)
p.name = "China"
p.id =
p.score =
fmt.Println(*p)
//var定义的变量是数值形式
var st Student
st.name = "Chinese"
st.id =
st.score =
fmt.Println(st)
//make分配slice、map和channel的空间,并且返回的不是指针
var ptr *[]Student
fmt.Println(ptr) //ptr == nil
ptr = new([]Student) //指向一个空的slice
fmt.Println(ptr)
*ptr = make([]Student, , )
fmt.Println(ptr)
stu := []Student{{"China", , }, {"Chinese", , }, {"Chince", , }}
fmt.Println(stu)
}

golang学习之指针、内存分配的更多相关文章

  1. C/C++指针内存分配小细节

    char *pc = NULL; pc = new char[0]; pc[0] = '1'; 相信初学者看见上面这段代码,都会觉得奇怪,new char[n]中的n指定给指针变量分配多少内存空间,而 ...

  2. 《深入理解Java虚拟机》学习笔记之内存分配

    JVM在执行Java程序的过程中会把它所管理的内存划分若干个不同的数据区域,如下图: 大致可以分为两类:线程私有区域和线程共享区域. 线程私有区域 程序计数器(Program Counter Regi ...

  3. C++学习011-常用内存分配及释放函数

    C++用有多种方法来分配及释放内存,下面是一些经常使用的内存分配及释放函数 现在我还是一个技术小白,一般用到也指示 new+delete 和 malloc和free 其他的也是在学习中看到,下面的文字 ...

  4. 【C/C++学院】0828-数组与指针/内存分配/数据结构数组接口与封装

    [送给在路上的程序猿] 对于一个开发人员而言,可以胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中.由此简化系统的开发,是其架构生涯的第一步. ...

  5. C语言学习笔记--动态内存分配

    1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确 ...

  6. JVM学习总结四——内存分配策略

    之前几篇我们介绍了jvm的内存模型以及垃圾回收机制,而本篇我们将介绍几个JVM中对象在分配内存是应该遵循的策略.毕竟,想要去优化程序,不仅要考虑垃圾回收的过程,还要从对象内存分配的角度减少gc的代价. ...

  7. memcached学习——memcached的内存分配机制Slab Allocation、内存使用机制LRU、常用监控记录(四)

    内存分配机制Slab Allocation 本文参考博客:https://my.oschina.net/bieber/blog/505458 Memcached的内存分配是以slabs为单位的,会根据 ...

  8. Golang: map类型切片内存分配

    切片ik通过索引访问,然后为每个map分配内存: 切片jk通过获得切片内每个元素的拷贝来分配内存,并未成功为切片内每个map分配内存,使用时赋值也就失败了 1 package main 2 3 imp ...

  9. 【转载】JVM 学习——垃圾收集器与内存分配策略

    本文主要是对<深入理解java虚拟机 第二版>第三章部分做的总结,文章中大部分内容都来自这章内容,也是博客 JVM 学习的第二部分. 简述 说到垃圾收集(Garbage Collectio ...

随机推荐

  1. Oracle 9 - 分析undo和snapshot too old错误

    什么操作会生成undo INSERT生成的UNDO最少,只要记录新的rowid UPDATE生成的undo多一点,它要记录修改前的数据中的那部分. DELETE生成最多的undo, 因为它要记录整行被 ...

  2. CentOS5下配置JDK1.6+TOMCAT6

    CentOS5下配置JDK1.6+TOMCAT6 安装环境:centos 5.5+jdk1.6.0_25+tomcat6.0.32 一.下载安装jdk1.6.0_25 mkdir /usr/java ...

  3. Qt 添加外部库文件(四种方法)

    Qt添加外部库文件, 一种就是直接加库文件的绝对路劲,这种方法简单,但是遇到多个库文件的时候,会很麻烦,而且,如果工程移动位置以后还需要重新配置 另一种就是相对路径了,不过Qt 编译的文件会在一个单独 ...

  4. Android:Logcat中找不到本应该输出的Log调试信息

    1.有没有设置Logcat的filter, 2.如果选中了自定义的filter,Tag是否和程序中想查看的那条输出信息的Tag相同: 3.Level等级是否设置的太高. filter设置 点击loca ...

  5. 每用户订阅上的所有者 SID 不存在 (异常来自 HRESULT:0x80040207)

    出现这个问题是因为pQueryFilter.WhereClause = "RoomNumber=" +cmbFromPoint.SelectedItem;中的cmbFromPoin ...

  6. Spring使用外部的配置文件

    在使用Spring做web项目的时候,通常会使用到数据库的连接信息 jdbcUrl driverClass username password 那么应该如何使用这些属性呢? 如在Spring中使用数据 ...

  7. 腾讯大讲堂ppt全集

    腾讯大讲堂ppt全集 腾讯大讲堂ppt全集资料下载 腾讯大讲堂ppt1-62资料下载 最新最全的腾讯大讲堂ppt全集 腾讯大讲堂ppt全集资料下载 腾讯大讲堂ppt1-62资料下载地址 http:// ...

  8. 【翻译】JavaScript中的作用域和声明提前

    原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html ===翻译开始=== 你知道下面的JavaScript脚本执 ...

  9. 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口(老罗学习笔记4)

    在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口.实现这两者的目的是为了向更上一层提供硬件访问接口,即为 ...

  10. 【C#设计模式——创建型模式】工场方法模式

    工场方法模式对简单工场模式进行了乔庙的扩展,不是用一个专门的类来决定实例化哪一个子类.相反,超类把这种决定延迟到每个子类.这种模式实际上没有决策点,就是没有直接选择一个子类实例化的决策. 看书上的例子 ...