首页 > 其他分享 >Go笔记(八):指针

Go笔记(八):指针

时间:2023-04-18 09:24:15浏览次数:40  
标签:intpt 变量 fmt 笔记 var Printf Go 指针

1、指针

  在Go中,指针的操作有两个符号:&(取地址) 和 * (变量指针的声明 | 取指针变量的值)。

  一个指针变量指向了一个值的内存地址。

  Go中函数传值皆为值拷贝,对于引用类型的传值,可以创建一个指针变量,无需拷贝数据。Go中,类型指针不能进行偏移和运算。

2、指针地址和指针类型

  变量在运行是都拥有一个地址,该地址代表变量在内存中的位置。

  Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。

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

3、声明指针

3.1、声明指针变量

var pointer_name *type

   pointer_name: 指针变量名称

  type:指针类型

  *: 用于指定变量是作为一个指针

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 声明指针
 6 func definepointer() {
 7    // * 变量指针的声明
 8    var intpt *int // 指向整型
 9    var strpt *string // 指向字符串
10    // & 取指针变量的地址
11    fmt.Printf("intpt: %v\n", &intpt)
12    fmt.Printf("strpt: %v\n", &strpt)
13 }
14 
15 func main() {
16    definepointer()
17 }

  执行结果如下:

3.2、空指针

  当一个指针被定义后没有分配到任何变量时,它的值为 nil。nil 指针也称为空指针,值为指针类型的默认值。

 1 package main
 2 
 3 import "fmt"
 4 
 5 // 空指针
 6 func defineNilPointer() {
 7    var ptr *int
 8    fmt.Printf("ptr: %v\n", ptr)
 9    fmt.Printf("ptr 的值为 : %x\n", ptr)
10 }
11 
12 func main() {
13    defineNilPointer()
14 }

  执行结果如下:

3.3、指针初始化

 1 package main
 2 
 3 import "fmt"
 4 
 5 /**
 6    初始化指针
 7  */
 8 func initpointer() {
 9    // * 变量指针的声明
10    var intpt *int
11    var i = 10
12    // 将变量i的内存地址赋给指针类型的变量intpt
13    intpt = &i
14    fmt.Printf("initpointer ===> intpt地址: %v\n", intpt)
15    // * 取指针类型的变量值
16    fmt.Printf("initpointer ===> intpt的值: %v\n", *intpt)
17 
18    // 声明string类型指针
19    var strpt *string
20    // 类型
21    fmt.Printf("initpointer ===> strpt的类型: %T\n", strpt)
22    s1 := "timi"
23    strpt = &s1
24    // 地址
25    fmt.Printf("initpointer ===> s1的地址: %v\n", strpt)
26    // 指针类型
27    fmt.Printf("initpointer ===> s1值: %v\n", *strpt)
28 }
29 
30 func main() {
31    initpointer()
32 }

  执行结果如下:

4、指针数组

 1 package main
 2 
 3 import "fmt"
 4 
 5 /**
 6    指针数组的声明及初始化
 7  */
 8 func pointArr() {
 9    var arrptInt [3]*int
10    // 数组元素变量内存地址
11    fmt.Printf("arrptInt的地址 : %v\n", arrptInt)
12    // 数组指针类型
13    fmt.Printf("arrptInt的指针类型 : %T\n", arrptInt)
14    // 数组指针元素默认值
15    fmt.Printf("arrpt的默认值 : %x\n", arrptInt)
16 
17    // 定义字符串类型指针
18    var arrptStr [3]*string
19    // 定义数组
20    arrpt := []string{"tom", "jack", "timi"}
21    // 将数组的元素地址赋值到字符串类型指针中
22    for i := 0; i < len(arrpt); i++ {
23       arrptStr[i] = &arrpt[i]
24    }
25    // 输出字符串类型指针内容
26    for i := 0; i < len(arrptStr); i++ {
27       fmt.Printf("arrptStr[%d] = %v\n", i, *arrptStr[i])
28    }
29 }
30 
31 func main() {
32    pointArr()
33 }

  执行结果如下:

 

标签:intpt,变量,fmt,笔记,var,Printf,Go,指针
From: https://www.cnblogs.com/RunningSnails/p/17328284.html

相关文章

  • ReactiveUI使用笔记,教程总结
    ReactiveUI使用笔记,教程总结一、LINQ和RxLINQ(LanguageIntergratedQuery)对数据集合、关系数据、XML文件等对象进行查询和提取数据的技术,提供了统一的类似SQL的语法来对数据进行查询,而不用关心数据源的不同。二、Rx(ReactiveExtensions)对LING的一种扩展,提供了一种新的组织和......
  • TypeScript学习笔记-尚硅谷TypeScript教程(李立超老师TS新课)
    TypeScript学习笔记-尚硅谷TypeScript教程(李立超老师TS新课)https://blog.csdn.net/m0_46549017/article/details/124626987?ops_request_misc=&request_id=&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2~all~koosearch~default-2-124626987-null-null.142^......
  • Linux学习笔记
    IP地址和主机名IP地址ifconfig可以用来查询本机的IP地址,如果不能使用,可以通过installnet-tools安装。Centos系统下ens33表示主网卡;inet后表示IP地址;lo表示本地回环网卡;127.0.0.1表示代指本机;0.0.0.0可以用于代指本机,同时在放行设置中0.0.0.0表示允许任意IP访问。主机名h......
  • 2023/4/17笔记
    bind函数std::bind函数定义在头文件functional中,是一个函数模板,是函数适配器f - Callableobject(functionobject,pointertofunction,referencetofunction,pointertomemberfunction,orpointertodatamember)thatwillbeboundtosomearguments(参数).Cal......
  • Django中TruncMonth截取日期使用方法,按月统计
    将原来的年月日按照月份来截取统计数据,具体参考如下官方示例:-官方提供fromdjango.db.models.functionsimportTruncMonthArticle.objects.annotate(month=TruncMonth('timestamp'))#Truncatetomonthandaddtoselectlist.values('month')#GroupBymonth.anno......
  • 《代码大全》阅读笔记1
    第一部分打好基础第2章隐喻重要的研发成果常常产自类比(analogy)。通过把你不太理解的东西和一些你较为理解、且十分类似的东西做比较,你可以对这些不太理解的东西产生深刻的理解。这种使用隐喻的方法叫做“建模”。目前最合适隐喻:建造软件(BuildingSoftware)第3章前期准备(Measu......
  • 【进阶13】【自学笔记】Python logging模块封装
    一、定义  Pythonlogging模块是一个可以通过控制日志级别、输出位置等方式来实现记录日志的模块。logger对象的不同方法来记录不同级别的日志。  其中,debug()方法用于记录debug级别的日志,info()方法用于记录info级别的日志,warning()方法用于记录warning级别的日志,err......
  • 【学习笔记】SAM的应用
    command_block-SAM的应用感谢大佬的指点暴论:后缀数组什么辣鸡啊,再也不用后缀数组啦!加入SAM神教!CF802IFakeNews(hard)建出后缀自动机,可知一个串的出现次数即为endpos个数也是后缀链接树上的子节点个数。同一endpos集合的子集中子串长度连续且长度区间为\([maxlen(sam[c......
  • 论文解读《Automatically discovering and learning new visual categories with rank
    论文信息论文标题:Automaticallydiscoveringandlearningnewvisualcategorieswithrankingstatistics论文作者:K.Han, Sylvestre-AlviseRebuffi, SébastienEhrhardt, A.Vedaldi, AndrewZisserman论文来源:ICLR2020论文地址:download 论文代码:download视屏讲解:clic......
  • (微服务)服务治理:熔断器介绍以及hystrix-go的使用
    一、什么是熔断器要理解熔断器,可以先看看电路中使用的保险丝。保险丝(fuse)也被称为电流保险丝,IEC127标准将它定义为“熔断体(fuse-link)”。保险丝是一种保证电路安全运行的电子元器件,作用就是在电流异常升高到一定的高度和热度的时候,自身熔断切断电流,这样可以保护电路安全运行。......