Go 语言 – 指针

BTC算力延续下降,周均人气跌至近1月低位

比特币日报讯,据TokenInsight数据显示,反映区块链行业整体表现的TI指数北京时间05月25日8时报664.19点,较昨日同期下跌28.12点,跌幅为4.06%。此外,在TokenInsight密切关注的10大行业中,24小时内涨幅最高的为电子商务行业…

我们前面学习过,每一个变量都有一个内存位置,每一个内存位置都可使用取址运算符(&) 来访问的地址,它表示了在内存中的一个地址。

Go 语言支持指针,但只支持指针的取址运算符(&) 和解址运算符(*),不支持指针的算术运算

因此 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务

下面的范例输出了变量 a 在内存中的地址

/**
 * file: main.go
 * author: 简单教程(www.twle.cn)
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

package main

import "fmt"

func main() {
   var a int = 10   

   fmt.Printf("变量的地址: %xn", &a  )
}

编译运行以上 Go 语言范例,输出结果如下

$ go run main.go
变量的地址: c420014158

什么是指针

一个指针变量可以指向任何一个值的内存地址它指向那个值的内存地址

指针类似于变量和常量,在使用指针前需要声明指针

语法

声明一个指针的语法格式如下

var var_name *var-type
  • var-type 为指针类型
  • var_name 为指针变量名
  • * 号用于指定变量是作为一个指针

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

下面这些都是有效的指针声明

var ip *int        /* 指向整型*/
var fp *float32    /* 指向浮点型 */

这些指针都是指向 int 或 float32 的指针

如何使用指针

Go 语言中的指针不支持算术运算,只支持简单的赋值和取值操作

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

Go 语言指针使用流程如下

  1. 定义指针变量
  2. 为指针变量赋值
  3. 访问指针变量中指向地址的值。

范例

/**
 * file: main.go
 * author: 简单教程(www.twle.cn)
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

package main

import "fmt"

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

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

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

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

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %dn", *ip )
}

编译运行以上 Go 语言范例,输出结果如下

$ go run main.go
a 变量的地址是: 20818a220
ip 变量储存的指针地址: 20818a220
*ip 变量的值: 20

Go 空指针

当一个指针被声明后又没有初始化(赋值)时,它的值为 nil

值为 nil 的指针也称为空指针

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

范例

/**
 * file: main.go
 * author: 简单教程(www.twle.cn)
 * Copyright © 2015-2065 www.twle.cn. All rights reserved.
 */

package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("ptr 的值为 : %xn", ptr  )
}

编译运行以上 Go 语言范例,输出结果如下

$ go run main.go
ptr 的值为 : 0

判断是否为空指针

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

Go 指针更多内容

下面这些内容是 Go 语言指针的应用范例

内容 描述
Go 指针数组 你可以定义一个指针数组来存储地址
Go 指向指针的指针 Go 支持指向指针的指针
Go 向函数传递指针参数 通过引用或地址传参,在函数调用时可以改变其值

BitMEX回应指控:控诉根本站不住脚,正在努力实现零宕机

据Cointelegraph报道,BitMEX母公司HDR Global Trading回应了来自BMA LLC公司在加州提起的诉讼,HDR Global Trading发言人指出诉讼站不住脚,“明显是把从网上挑出来的信息合到一起炒冷饭。” 图片来源:wiki…

Click to rate this post!
[Total: 0 Average: 0]

人已赞赏
Go语言技术开发

Go 语言 - 字符串

2020-5-29 16:25:00

Go语言技术开发

Go 语言 - 结构体

2020-5-29 16:26:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索