`

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 语言指针课程中,我们将深入理解这一重要的编程概念,它在 Go 语言中的作用以及如何使用指针来优化程序性能。指针是编程语言中的一个关键元素,尤其是在系统级编程和高性能计算中。让我们逐一探讨这些知识...

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

    Go语言指针访问结构体方法的介绍,实际上是要告诉我们在Go中如何使用指针来操作结构体实例的字段。在Go中,结构体的字段可以通过指针直接访问,这种访问是透明的,也就是说你不需要进行解引用操作。这和C++等其他...

    go语言电子书.zip

    Go语言,又称为Golang,是由Google公司开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike及Ken Thompson三位开发者设计,旨在提高软件的构建效率和可维护性,特别...

    Go语言学习笔记.pdf 共174页

    在Go语言基础部分,作者详细介绍了Go语言的基础知识,包括变量、基本类型、类型转换、常量、字符串、运算符、指针、保留字、控制结构、自定义类型、初始化、内置函数等内容。 在变量部分,作者讲解了变量的定义和...

    Go 语言课程和项目源码

    Go语言指针 作业 Day03 Go语言函数 defer与异常 Go语言数组 Go语言结构体 日期与时间 非类型安全指针 Go语言切片 作业 Day04 重点知识回顾与答疑 Day05 字符串 Go语言Map Go语言接口 错误处理 空接口与类型断言 函数...

    韩顺平_Go语言核心编程完整版笔记.zip

    5. **指针与内存管理**:讲解Go语言中的指针操作和内存管理,包括指针的使用、引用类型和垃圾回收机制。 6. **错误处理**:Go语言采用错误处理模式,笔记会介绍如何处理和报告错误,以及 panic 和 recover 的用法。...

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

    Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的语言。它旨在提高编程效率,简化并发编程,并强调简洁的编程哲学。Go语言的设计受到了多门经典编程语言的影响,如C语言、...

    Go语言基础(指针)

    在Go语言中,指针是程序设计中的一个重要概念,它允许我们存储变量的内存地址,进而可以修改变量的值,即使这个变量是在函数内部定义的。对于有一定基础的Go编程人员来说,理解并熟练掌握指针的使用是提高编程效率和...

    谷歌 GO 语言 教程 PDF

    谷歌的Go语言,也被称为Golang,是由Google在2009年推出的一种开源编程语言。它被设计为简洁、高效、并发性好,并且具有内置的垃圾回收机制,使得开发人员可以更专注于编写可维护的代码。这个“谷歌GO语言教程PDF”...

    go语言实战源码

    《Go语言实战》是一本深度解析Go语言的实践性书籍,其源码是学习和理解Go语言编程理念、设计模式以及实际应用的重要资源。通过分析这些源码,我们可以深入掌握Go语言的核心特性和最佳实践。 Go语言,由Google公司...

    Go语言101.pdf版

    Go语言101.pdf版 Go语言101.pdf版是Go语言入门指南,涵盖了Go语言的基本概念、语法、语义、标准库和高级主题等多方面的知识点。本书共50章节,从Go语言的基本概念开始,逐步深入到高级主题,旨在帮助读者系统地学习...

    Go语言实战_golang教程_Go_go_

    Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、C风格的编程语言。它旨在提高编程效率,简化系统编程,并且能够支持大规模的网络服务和分布式计算。Go语言实战教程是学习Go...

    Go语言高级编程

    Go语言之所以被称为网络和多核时代的C语言,是因为它从C语言继承并发扬了多种编程思想,包括表达式语法、控制流结构、基础数据类型、调用参数传值、指针等,并在并发编程上进行了革命性的创新。 Go语言的发展历史...

    golang基础教程-go语言快速入门.zip

    Go语言,又称Golang,是Google在2009年推出的一种开源编程语言,由罗伯特·格瑞史莫、罗布·派克和肯特·贝克等大神设计。Go语言的设计目标是简单、高效、安全,特别适合构建网络服务和并发程序。它吸收了C语言的...

    Go语言编程goland.pdf

    Go语言提供了自动垃圾回收机制,开发者不需要手动管理内存,减少了内存溢出和野指针的风险。 更丰富的内置类型 Go语言提供了更多的内置类型,例如数字、字符串、数组、slice、map、struct等,方便开发者编写程序。 ...

    手撕Go语言v1.1.pdf

    Go语言(又称Golang)是一种静态类型的编程语言,由Google工程师Robert Griesemer、Rob Pike及Ken Thompson在2007年开始设计并开发,于2009年正式发布。它被设计成一种简洁、高效且易于学习的语言,旨在解决现代软件...

    go语言入门教程,新手必备

    ### Go语言入门教程知识点详解 #### 一、Go语言的历史背景与起源 - **Limbo语言的影响**:Limbo语言被视为Go语言的前身之一,它不仅由相同的设计团队开发,而且Go语言还从Limbo中继承了许多优秀特性。 - **贝尔...

    go语言基本语言源码

    Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收式的、具有C风格的编程语言。它的设计目标是提高编程效率,简化多线程编程,以及优化网络和系统服务的开发。下面将详细讨论Go...

Global site tag (gtag.js) - Google Analytics