`

Go 语言指针

阅读更多
什么是指针

一个指针变量指向了一个值的内存地址。 类似于变量和常量,在使用指针前你需要声明指针。

指针声明格式如下:

var var_name *var-type

var-type 为指针类型,

var_name 为指针变量名,
* 号用于指定变量是作为一个指针。



以下是有效的指针声明:

var ip *int /* 指向整型*/

var fp *float32 /* 指向浮点型 */

如何使用指针

指针使用流程:

定义指针变量。

为指针变量赋值。

访问指针变量中指向地址的值。

在指针类型前面加上 * 号(前缀)来获取指针所指向的内容。


package main

import "fmt"

func main() {
   var a int= 20   /* 声明实际变量 */
   var ip *int        /* 声明指针变量 */

   ip = &a  /* 指针变量的存储地址 */

   fmt.Printf("a 变量的地址是: %x\n", &a  )

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip )

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip )
}
以上实例执行输出结果为:

a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20


Go 空指针

当一个指针被定义后没有分配到任何变量时,它的值为 nil。

nil 指针也称为空指针。

nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。

一个指针变量通常缩写为 ptr。

查看以下实例:

package main

import "fmt"

func main() {
  var  ptr *int

   fmt.Printf("ptr 的值为 : %x\n", ptr  )
}
以上实例输出结果为:

ptr 的值为 : 0
空指针判断:

if(ptr != nil)     /* ptr 不是空指针 */
if(ptr == nil)    /* ptr 是空指针 */


Go 语言指针数组


package main

import "fmt"

const MAX int = 3

func main() {
   a := []int{10,100,200}
   var i int
   var ptr [MAX]*int;

   for  i = 0; i < MAX; i++ {
     ptr[i] = &a[i] /* 整数地址赋值给指针数组 */
   }

   for  i = 0; i < MAX; i++ {
      fmt.Printf("a[%d] = %d\n", i,*ptr[i] )
   }
}
以上代码执行输出结果为:

a[0] = 10
a[1] = 100
a[2] = 200


Go 语言指针作为函数参数

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var a int = 100
   var b int= 200

   fmt.Printf("交换前 a 的值 : %d\n", a )
   fmt.Printf("交换前 b 的值 : %d\n", b )

   /* 调用函数用于交换值
   * &a 指向 a 变量的地址
   * &b 指向 b 变量的地址
   */
   swap(&a, &b);

   fmt.Printf("交换后 a 的值 : %d\n", a )
   fmt.Printf("交换后 b 的值 : %d\n", b )
}

func swap(x *int, y *int) {
   var temp int
  temp = *x    /* 保存 x 地址的值 */
   *x = *y      /* 将 y 赋值给 x */
   *y = temp    /* 将 temp 赋值给 y */

}
以上实例允许输出结果为:

交换前 a 的值 : 100
交换前 b 的值 : 200
交换后 a 的值 : 200
交换后 b 的值 : 100
分享到:
评论

相关推荐

    Go语言基础、进阶、提高课程第五节 Go语言指针,游戏关卡如何设计讲解1

    第五节 Go 语言指针 21、指针相关 22、对象与指针 103、使用 reflect 探究 struct 成员方法接收者指针 114、课后作业—难度: 145

    Go语言指针访问结构体的方法

    主要介绍了Go语言指针访问结构体的方法,涉及Go语言指针及结构体的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    Go语言圣经,golang学习入门到精通

    Go语言有时候被描述为“C类似语言”,或者是“21世纪的C语言”。Go从C语言继承了相似的表达式语 法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,还有C语言一直所看中的编译后机器 码的运行效率以及和...

    go语言圣经 .pdf

    一、Go语言的由来  Go语言亦叫Golong语言,是由谷歌Goggle公司推出。Go语言的主要开发者有:肯.汤姆逊(Ken Thompson)、罗布.派克(Rob Pike)和罗伯特.格里泽默(Robert Griesemer)。这三个都是大神,稍介绍一下他们的...

    Go语言·云动力 高清

    Go语言是由谷歌的Rob Pike、Ken Thompson和Robert Griesemer共同设计开发的一种新型程序设计语言。2012年Go l的推出,代表着Go语言的稳定成熟,也正式宣告Go走人了主流语言的行列。《Go语言鄠动力》是Go语言程序设计...

    Go语言基础(指针)

    主要面向有一定基础Go编程的开发人员,Go语言编程由浅入深进行讲解、演练。希望和大家一起学习,一起分项。

    Go语言 云动力[20M]

    《Go语言鄠动力》是Go语言程序设计入门书,介绍了Go语言的基础知识,包括静态类型、流程控制、函数、动态类型、面向对象、并发编程等内容,以及同其他C类语言相比,Go所具备的全新特性。同时,《Go语言鄠动力》还...

    GO语言基础学习文档

    一、 GO语言环境搭建 2 二、 Go 命令 2 go build 3 go clean 4 go fmt 4 go get 4 go install 4 go test 4 go doc(godoc) 5 三、 Go基础 5 关键字 5 定义变量 5 常量 6 内置基础类型 6  Boolean 6  数值类型 6 ...

    GO语言实战开发全覆盖课程

    在这个阶段,我学习了GO语言的基本数据类型、函数、控制流程、指针等知识点,以及面向对象编程和并发编程的基本概念和实践方法。该课程以实战项目为主线,让我深度学习和实践了GO语言开发的各种应用场景。通过学习...

    快慢指针判断链表是否有环-go 语言实现

    如果链表中存在环,那么 fast 指针最终会追上 slow 指针;如果 fast 指针到达链表的末尾(即 fast 或 fast.Next 为 nil),则说明链表中不存在环。 在 main 函数中,我们创建了一个有环的链表,并调用 hasCycle ...

    Go语言中的指针运算实例分析

    本文实例分析了Go语言中的指针运算方法。分享给大家供大家参考。具体分析如下: Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西。最近在...

    Go语言的方法接受者类型用值类型还是指针类型?

    很多人(特别是新手)在写 Go 语言代码时经常会问一个问题,那就是一个方法的接受者类型到底应该是值类型还是指针类型呢,Go 的 wiki 上对这点做了很好的解释,我来翻译一下。 何时使用值类型 1.如果接受者是一个 map...

    Go 学习笔记 第四版

    Go 语言基础语法 Go 语言数据类型 Go 语言变量 Go 语言常量 Go 语言运算符 Go 语言条件语句 Go 语言循环语句 Go 语言函数 Go 语言变量作用域 Go 语言数组 Go 语言指针

    快慢指针法判断链表是否有环-go语言实现

    如果链表中存在环,那么 fast 指针最终会追上 slow 指针;如果 fast 指针到达链表的末尾(即 fast 或 fast.Next 为 nil),则说明链表中不存在环。 在 main 函数中,我们创建了一个有环的链表,并调用 hasCycle ...

    Go学习随笔(五)指针\指针的指针\指针数组\指针传递函数

     Go语言使用 * 运算符来取得指向指针存储的内存地址所对应的值(指针的格式化为%p),Go语言指针不支持运算,也不支持 -&gt; 运算符,可以直接用,访问目标成员(有涉及到struct以后再写) func main() { a := 1

    Go语言的缓存库FreeCache.zip

    FreeCache 是一个 Go 语言的缓存库,无额外的 GC 负荷。数百万对象的垃圾收集延迟仅在数百毫秒。特性:可存储数以百万计条目零垃圾收集负荷高并发而且线程安全的访问纯 Go 语言实现支持对象失效近乎 LRU 的算法严格...

Global site tag (gtag.js) - Google Analytics