专栏首页Golang语言社区Golang语言--指针

Golang语言--指针

在Go中指针是很容易学习的。一些进入编程任务,指针更容易操作,如通过引用调用,需要要使用指针来执行。所以学习指针成为完美Go程序员很有必要。让我们开始学习指针的简单和容易的步骤。

如你所知,每一个变量是一个内存位置,每个存储单元都有其定义的地址,可以用符号(&)运算符,它表示一个内存地址进行访问。考虑下面的例子,这将打印中定义的变量的地址。

package main

import "fmt"

func main() {

var a int = 10

fmt.Printf("Address of a variable: %x\n", &a )

}

当上述代码被编译和执行时,它会产生导致一些如下:

Address of a variable: 10328000

所以,明白了什么是内存地址以及如何访问它,所以这个概念的基础上。现在,让我们来看看什么是指针。

什么是指针?

指针是一个变量,其值是另一个变量的地址,所述存储器位置,即,直接地址。就像变量或常量,必须声明指针之前,可以用它来存储任何变量的地址。指针变量声明的一般形式是:

var var_name *var-type

在这里,type为指针的基本类型;它必须是一个有效的Go数据类型,var-name是指针变量的名称。 * 用来声明指针使用星号。然而,在该语句中的星号被用来指定一个变量作为一个指针。以下是有效的指针声明:

var ip *int /* pointer to an integer */

var fp *float32 /* pointer to a float */

所有指针值的实际数据类型,无论是整数,浮点或以其他方式,都是相同的,代表一存储器地址的长十六进制数。不同数据类型的指针之间的唯一区别是变量的数据类型或常数,由该指针指向。

如何使用指针?

有一些重要的操作,我们使用指针非常频繁。 (a)定义一个指针变量(b)分配一个变量的指针;(c)在指针变量的地址,可用地址来访问它的值。这可通过使用一元运算符 * ,返回位于其操作数所指定的地址的变量的值。下面的例子利用这些操作:

package main

import "fmt"

func main() {

var a int= 20 /* actual variable declaration */

var ip *int /* pointer variable declaration */

ip = &a /* store address of a in pointer variable*/

fmt.Printf("Address of a variable: %x\n", &a )

/* address stored in pointer variable */

fmt.Printf("Address stored in ip variable: %x\n", ip )

/* access the value using the pointer */

fmt.Printf("Value of *ip variable: %d\n", *ip )

}

当上述代码被编译和执行时,它会产生一些如下:

Address of var variable: 10328000

Address stored in ip variable: 10328000

Value of *ip variable: 20

在Go中的nil指针

Go语言编译一个 nil 值赋给一个没有被确切的地址分配的指针变量。这样做是在变量声明时,分配 nil 指针被称为nil指针。

nil指针是一个常数为零在几个标准库中定义的值。考虑下面的程序:

package main

import "fmt"

func main() {

var ptr *int

fmt.Printf("The value of ptr is : %x\n", ptr )

}

让我们编译和运行上面的程序,这将产生以下结果:

The value of ptr is 0

在大多数操作系统中,程序不允许访问存储器的0地址,因为该存储器是由操作系统保留。然而,存储器地址0具有特别重要的意义;它表明,该指针不指向一个访问的存储器位置。不过,按照惯例,如果一个指针包含nil(零)的值,则假定它指向一个什么。

要检查零(nil)指针,可以使用if语句如下:

if(ptr != nil) /* succeeds if p is not nil */

if(ptr == nil) /* succeeds if p is null */

本文分享自微信公众号 - Golang语言社区(Golangweb)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 语言指针

    Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。 接下来让我们来一步步学习 Go 语言指针。 我们都知道,变量是一种使用方便的占位...

    李海彬
  • Go语言指针

    Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。 接下来让我们来一步步学习 Go 语言指针。 我们都知道,变量是一种使用方便的占位...

    李海彬
  • 厚土Go学习笔记 | 16. go语言有指针 没有指针运算

    指针内其实就是保存了一个变量地址。 var p *int 这行代码声明了一个 int 类型的指针 p i := 42 p = &i & 符号是取地址符,&i 代...

    李海彬
  • 基础知识 | 每日一练(59)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    C语言入门到精通
  • C语言指针5分钟教程

    指针、引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量。在这份教程里“引用”表示计算机内存地址。从指针指向的内 存...

    猿人谷
  • 空指针 到底是什么意思?

    各位,前段时间我们有推文介绍过野指针和悬空指针,那C中还有一个叫做空指针的名词,它究竟是指什么呢,今天就跟大伙聊聊这个空指针。

    7089bAt@PowerLi
  • 视频流媒体平台编译中如何运用Go语言指针?

    本文讲的也是我们在编译流媒体平台EasyNVR的时候,碰到的go语言指针问题,就打算为大家介绍一下Go语言指针的运用。

    EasyNVR
  • 怎样熟练掌握C语言的指针?

    从事C语言开发已经超过10个年头,越来越觉得指针的方便之处,但在初学者来看指针就是拿下这门编程最大的拦路虎,毕竟很多人开始学习C语言都是激情四射结果遇上了指针猫...

    程序员互动联盟
  • 142. Linked List Cycle II

    首先要证明链表有环: 用快慢两个指针解决。快指针每次走两步,慢指针每次走一步。如果有环,则一定会最终在环内某点相遇。下面证明这一点:

    平凡的学生族
  • 指针和引用的区别

    先看代码输出是什么? ? 最后输出是: 1234567890 hello 指针和引用主要区别 1 在C++中,指针和引用经常用于函数的参数...

    程序员小王

扫码关注云+社区

领取腾讯云代金券