Go - Pointers(指针)

Go - Pointers(指针) 首页 / Golang入门教程 / Go - Pointers(指针)

如您所知,每个变量都是一个内存位置,每个内存位置都定义了其地址,可以使用&运算符(&)进行访问,该地址表示内存中的地址,考虑以下示例,它将打印定义的变量的地址-

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 是指针的基本类型,它必须是有效的 C 数据类型,并且 var-name 是指针变量的名称,用于声明指针的星号*与用于乘法的星号相同。但是,在此语句中,星号用于将变量指定为指针。以下是有效的指针声明-

var ip *int        /* 指向整数的指针 */
var fp *float32    /* 指向浮点数的指针 */

所有指针的值的数据类型都相同,是一个十六进制数字,代表一个内存地址。不同数据类型的指针之间的唯一区别是指针指向的变量或常量的数据类型。

使用指针

我们经常使用指针执行一些重要的操作:(a)我们定义指针变量,(b)将变量的地址分配给指针,并且(c)访问指针变量中存储的地址处的值。

链接:https://www.learnfk.comhttps://www.learnfk.com/go/go-pointers.html

来源:LearnFk无涯教程网

所有这些操作都是使用一元运算符*进行的,该运算符返回位于其操作数指定地址处的变量的值。以下示例演示如何执行这些操作-

package main

import "fmt"

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

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

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

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

   /* 使用指针访问值 */
   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

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)     /* 如果 p 不为零则成功 */
if(ptr == nil)    /* 如果 p 为空,则成功 */

指针概念

指针有很多但很简单的概念,它们对于Go编程非常重要。 Go程序员应该清楚以下指针概念-

Sr.NoConcept & 描述
1 Go - Array of pointers

您可以定义数组以容纳多个指针。

2 Go - Pointer to pointer

Go允许您将指针放在指针上,依此类推。

3 Passing pointers to functions in Go

通过引用或地址传递参数都可以使被调用函数在调用函数中更改传递的参数。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学游戏开发 -〔蔡能〕

零基础学Python -〔尹会生〕

深入拆解Tomcat & Jetty -〔李号双〕

高并发系统设计40问 -〔唐扬〕

手机摄影 -〔@随你们去〕

深入剖析Java新特性 -〔范学雷〕

B端产品经理入门课 -〔董小圣〕

深入拆解消息队列47讲 -〔许文强〕

结构写作力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)