Go指针

   Go语言中的指针非常简单,没有偏移和运算,只需要记住两个符号。&取变量地址与*根据地址取值。

   以下是一个简单的示例:

package main

import (
"fmt"
) func main() {
var arr = [3]string{"一", "二", "三"}
var addArr = &arr
fmt.Printf("%p \n",addArr) // 打印地址 0xc000062330
fmt.Printf("%v \n",*addArr) // 根据地址打印值
}

指针类型

   当我们使用&取出一个变量的内存地址时,可以通过%T查看其指针类型。

   Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:*int*int64*string等。

package main

import (
"fmt"
) func main() {
var a int = 100
fmt.Printf("%T",&a) // *int
}

指针变量

   以下示例中声明了一个指针变量,但是该指针指向的内存地址还没有被Go进行分配,赋值会引发异常。

package main

import (
"fmt"
) func main() {
var a *int
*a = 100
fmt.Println(*a)
// +0x2a exit status 2
}

new

   new()是一个内置的函数,用于对一个指针变量开辟内存空间。 为了解决上面内存空间未被开辟的问题,可以使用该函数进行开辟。

   注意,实际开发中new用的并不多。

package main

import (
"fmt"
) func main() {
var a *int
a = new(int) // 开辟内存
*a = 100
fmt.Println(*a)
}

make

   make()new()相同,都是进行内存空间开辟的,但是它只针对slicemapchan的内存创建,并且它返回的值是这三个类型的本身,这三种类型不是属于值类型,而是属于引用类型,故我们可以不使用变量对其进行接收。

   注意,在声明上述三种类型时,都需要使用make进行内存创建。

package main

import (
"fmt"
) func main() {
var b map[string]string
b = make(map[string]string, 10)
b["first"] = "第一个元素"
fmt.Println(b["first"])
}

本章小结

  

   指针取值与指针地址

   取地址操作符&和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值。

   变量、指针地址、指针变量、取地址、取值的相互关系和特性如下:

    • 对变量进行取地址(&)操作,可以获得这个变量的指针变量。
    • 指针变量的值是指针地址。
    • 对指针变量进行取值(*)操作,可以获得指针变量指向的原变量的值。

   new与make的区别

    1. 二者都是用来做内存分配的。
    2. make只用于slicemap以及channel的初始化,返回的还是这三个引用类型本身;
    3. new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

最新文章

  1. 原创 C++应用程序在Windows下的编译、链接:第二部分COFF/PE文件结构
  2. [LeetCode] Reverse Linked List II 倒置链表之二
  3. ANTLR3完全参考指南读书笔记[04]
  4. HDU 2176 取(m堆)石子游戏(Nim)
  5. sublime php语法检查
  6. 团体程序设计天梯赛-练习集L2-004. 这是二叉搜索树吗
  7. 说说http请求
  8. 关于constructor与 Prototype的理解
  9. HNCU1101:马的移动(BFS)
  10. Spring Boot 系列(三)属性配置&自定义属性配置
  11. python+selenium 输出2种样式的测试报告
  12. C#十进制与任意进制的转换
  13. Spark应用【根据新df更新旧df】
  14. go语言中操作mysql的方法
  15. 【转】C/C++位域结构深入解析
  16. Programming 2D Games 读书笔记(第三章)
  17. HDU-3480 Division (四边形不等式优化DP)
  18. Oracle创建库
  19. InterView之C/CPP
  20. (转)NIO 内存映射文件

热门文章

  1. 前端Web APIS
  2. WebApis中DOM执行机制的认识
  3. 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序
  4. Laravel chunk和chunkById的坑
  5. React-Native知识点相关
  6. windows快速安装linux虚拟机
  7. Android开发之ListView详解 以及简单的listView优化
  8. Unity 打AssetBundle和加载方案
  9. python小白入门基础(二:变量)
  10. 牛客多校训练AFJ(签到)