[Go] --- 指针和内存分配
来源:互联网 发布:衣柜 知乎 编辑:程序博客网 时间:2024/04/30 22:22
Email : hahayacoder@gmail.com
1 Go语言中的指针和C语言中在使用上几乎没有什么差别,熟悉C语言应该很容易掌握,下面是Go语言中使用指针的代码
package mainimport "fmt"func main() { var value int = 1 //指向int型的指针 var pInt *int = &value //打印相关信息fmt.Printf("value = %d \n pInt = %d \n *pInt = %d \n", value, pInt, *pInt) //通过指针修改指针指向的值 *pInt = 222fmt.Printf("value = %d \n pInt = %d \n *pInt = %d \n", value, pInt, *pInt) //使指针指向别的地址 var m int = 123 pInt = &m fmt.Printf("value = %d \n pInt = %d \n *pInt = %d \n", value, pInt, *pInt)}
2 Go语言中有两个分配内存的机制,分别是内建的函数new和make。但是new和make并不能等同,他们所做的事情其实并不同,所应用到的类型也不相同,应用场景也不相同,但是在区分在何时使用new和make却有一个简单的规则
3 new(T)函数是一个分配内存的内建函数,但是不同于其他语言中内建new函数所做的工作,在Go语言中,new只是将内存清零,并没有初始化内存。所以在Go语言中,new(T)所做的工作是为T类型分配了值为零的内存空间并返回其地址,即返回*T。也就是说,new(T)返回一个指向新分配的类型T的零值指针
即:var pInt *int = new(int) //*pInt = nil
4 make(T, args)函数与new(T)函数的目的不同。make(T, args)仅用于创建切片、map和channel(消息管道),make(T, args)返回类型T的一个被初始化了的实例。而new(T)返回指向类型T的零值指针。也就是说new函数返回的是*T的未初始化零值指针,而make函数返回的是T的初始化了的实例
5 Go语言中出现new和make两个分配内存的函数,并且使用起来还有差异,主要原因是切片、map、channel这三种类型在使用前必须初始化相关的数据结构。例如,切片是一个有三项内容的数据类型,包括指向数据的指针(在一个数组内部进行切片)、长度和容量,在这三项内容被初始化之前,切片值为nil。换句话说:对于切片、map、channel,make(T, args)初始化了其内部的数据结构并为他们准备了将要使用的值
例如:make([]int, 10, 100); //分配一个整形数组,长度为10,容量为100,并返回其前10个数组的切片
6 下面通过一个简单的例子来说明Go语言中new函数和make函数的差别
package mainimport "fmt"func main() { //使用new为切片分配内存 但是返回的是零值指针 //接着还是用使用make初始化 不必要的使问题复杂化 所以几乎不这样使用 var p *[]int = new([]int) //*p = nil fmt.Println(p) //输出&[]fmt.Println(*p) //输出[] //使用make为切片分配内存 在为切片分配内存时一般使用这种方法 var v []int = make([]int, 10) fmt.Println(v) //输出[0 0 0 0 0 0 0 0 0 0 0]}
7 通过上面的例子得出,在为切片、map、channel这三种类型分配内存时,为了不必要的使问题复杂化,应该使用Go的内建make函数
- [Go] --- 指针和内存分配
- 动态内存分配和指针
- 动态内存分配和指针
- Go学习笔记四(指针与内存分配)
- go-内存分配
- C语言指针传递和内存分配
- 指针和堆的内存分配
- C指针详解和内存分配
- delphi 指针的内存分配和释放
- C语言指针传递和内存分配
- 指针的内存分配和释放
- 内存分配 指针和数组对比
- C语言指针传递和内存分配
- 数组和指针内存分配示例代码
- 数组和指针内存分配示例代码
- 类内存分配和this指针
- C和指针详解------动态内存分配
- 内存分配 指针和数组对比
- 【设计模式】之一Memento
- 笔记本怎么设置WIfi热点
- 第五周项目三长方柱类
- Mindmanager2012安装图解
- 在任务管理器里用内存使用来画波浪线
- [Go] --- 指针和内存分配
- Windows下的双显的设置
- B. Spreadsheets
- 蓝桥杯 2013 全国软件设计大赛 模拟赛 Java 本科B组 解题报告
- Android开发之二:Android用户界面开发简介
- CSDN博客与ITEYE博客同步
- PCI Express 1x, 4x, 8x, 16x bus pinout
- delphi DateUtils功能详解
- 用secureCRT链接远程linux操作系统,出现“远程主机拒绝链接”的提示