广告
返回顶部
首页 > 资讯 > 精选 >Go语言中指针的知识点有哪些
  • 949
分享到

Go语言中指针的知识点有哪些

2023-07-04 11:07:46 949人浏览 八月长安
摘要

今天小编给大家分享一下Go语言中指针的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 什么是指针指针是存储其

今天小编给大家分享一下Go语言中指针的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

1. 什么是指针

指针是存储其指向地址的变量(强调一下,只是存储数值的变量)。

特定类型的指针只能指向该类型(指针指向的数据类型不可变)。

2. GoLang 指针语法

指针的语法非常简单。以下是 Go 中指针声明的语法。

var ptr *type
var ptrint *int     // 指向 int 的指针

指针的零值是 nil

3. Go 中指针的初始化

类型的指针使用 & 对其进行初始化:

package main

import (
   "fmt"
)

func main() {
   var q int = 42
   var p *int     // declare the pointer
   p = &q         // initialize the pointer
   fmt.Println(p)  // 0x40e020
}

4. Go 指针取值

指针取值意味着获取指针保存的地址内的值。下面是使用 * 运算符执行指针取值操作的示例:

package main

import (
   "fmt"
)

func main() {
   var q int = 42
   var p *int
   p = &q
   fmt.Println(p)  // 0x40e020
   fmt.Println(*p) // 42
}

5. GoLang 中指针的指针

指针的地址为一个数值,此数值也可以被赋值给其他变量。因此,我们可以创建间接级别。这些间接级别有时会产生不必要的混淆,所以请谨慎使用。

package main

import (
   "fmt"
)

func main() {  
   i := 64
   j := &i  // j 是 int 类型的指针
   k := &j  // k 是存放指针地址的指针,也是 int 类型

   fmt.Println(i)  // 64

   fmt.Println(j)  // 0x40e020

   fmt.Println(*j) // 64 (value inside that address)

   fmt.Println(k)  // 0x40c138

   fmt.Println(*k) // 0x40e020 (address of j)
}

6. 指向接口的指针

指针可以指向任何东西,甚至可以指向接口。当使用空接口时,返回的值为 nil

package main

import (
   "fmt"
)

func main() {  
   var a interface{}
   b := &a
   fmt.Println(b)    // 0x40c138
   fmt.Println(*b)   // <nil>
}

下面是一个使用带有指针接口的例子。

package main

import (
   "fmt"
)

// 定义接口
type Bird interface{
   fly()
}

type B struct{
   name string
}

// 实现它
func (b B)fly() {
   fmt.Println("Flying...")
}

func main() {  
   var a Bird = B{"Peacock"}
   b := &a
   fmt.Println(b)    // 0x40c138
   fmt.Println(*b)   // {Peacock}
}

这里 “a” 是一个 struct 类型的 Bird,然后用于接口类型,如您所见。这就是多态的使用。Go 允许使用 接口来实现多态. 因此,您可以看到指向结构或接口的指针是 Go 中必不可少的工具

7. 指针作为函数参数

指针可以在 函数  中作为参数使用。与直接使用值相比,它有一些优势。使用指针作为参数是将大对象传递给函数的一种非常有效的方式。因此,使用它是一个巨大的优化

package main

import (
   "fmt"
)

//声明指针参数
func f(a *int) {
   fmt.Println(*a)
}

func main() {  
   var a int = 42

   // 传递地址
   f(&a) // 42
}

使用大型对象可以减缓执行时间,这是将指针传递给结构体的示例。这是处理大对象的有效方法。

package main

import (
   "fmt"
)

type Human struct {
   name string
   age int
   place string
}

func f(h *Human) {
   fmt.Println("The user", (*h).name, "is", (*h).age, "years old and he is from", (*h).place)
}

func main() {  
   john := Human{"John", 36, "Las Vegas"}

   f(&john) // The user John is 36 years old and he is from Las Vegas
}

取消引用结构时要小心。如果您使用它像 *structname.field1 那么它会抛出错误。 正确的方法是 (*structname).field1

在函数内部使用指针会使值「可变」,除非它的参数为 const,因此,每当我们想要更改一个值时,我们应该使用指向该值的指针作为函数参数,然后进行必要的修改。

8. Go 中的「new」函数

Go 中的 new 函数返回一个指向类型的指针。

package main

import (
   "fmt"
)

func main() {  
   ptri := new(int)
   *ptri = 67

   fmt.Println(ptri)  // 0x40e020
   fmt.Println(*ptri) // 67
}

9. 从函数返回指针

可以像其他值一样从函数返回任何类型的指针。这真的很简单。我们不直接返回值,而是返回该值的地址。

package main

import (
   "fmt"
)

func p() *int {  // 将返回类型指定为指针
   v := 101

   // 返回地址
   return &v
}

func main() {  
   n := p()
   fmt.Println(n)  // 0x40e020
   fmt.Println(*n) // 101
}

10. 指向函数的指针

指向函数的指针在 Go 中是隐式工作的。这意味着我们不需要将其声明为指针。

package main

import (
   "fmt"
)

func main() {      
   f := func() {
       fmt.Println("a function")  
   }
   pf := f
   pf() // 一个函数
}

11. Go 中使用指针要记住的事项

Go 中不允许进行指针运算。因此,我们不能像在 C/C++ 中那样执行一元递增或递减之类的操作。
我们可能希望使用指向数组的指针,但是使用切片是一个更好的选择。切片比指向数组的指针用途广泛得多。代码非常简洁,让我们的工作更加容易。因此,尽可能使用切片。

以上就是“Go语言中指针的知识点有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Go语言中指针的知识点有哪些

本文链接: https://www.lsjlt.com/news/344777.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中指针的知识点有哪些
    今天小编给大家分享一下Go语言中指针的知识点有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 什么是指针指针是存储其...
    99+
    2023-07-04
  • C语言指针的相关知识点有哪些
    这篇文章将为大家详细讲解有关C语言指针的相关知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一站 字符指针----存放字符地址的指针1.使用方法(1)直接使用字符int main()...
    99+
    2023-06-29
  • c语言中指针零基础知识点有哪些
    小编给大家分享一下c语言中指针零基础知识点有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.指针是什么(可能有点难理解)指针的是啥?指针实际上就是地址,地址...
    99+
    2023-06-29
  • C/C++指针知识点有哪些
    本篇内容介绍了“C/C++指针知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础部分关于内存内存含义:存储器:计算机的组成中,用...
    99+
    2023-06-03
  • Go语言基础知识点有哪些
    这篇文章主要介绍Go语言基础知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Go 语言教程Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Gries...
    99+
    2023-06-20
  • Go语言网络编程知识点有哪些
    这篇文章主要介绍“Go语言网络编程知识点有哪些”,在日常操作中,相信很多人在Go语言网络编程知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言网络编程知识点有哪些”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-25
  • C语言基础知识点指针的使用
    目录一、指针的作用二、地址与指针三、指针变量四、数组与指针五、指针自加自减运算六、指向指针的指针七、指针变量作为函数形参八、函数指针九、函数指针数组十、指针的应用场景一、指针的作用 ...
    99+
    2022-11-13
  • Google Go语言基础知识有哪些
    这篇文章主要讲解了“Google Go语言基础知识有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Google Go语言基础知识有哪些”吧!先来个hel...
    99+
    2022-10-19
  • go语言和c语言在指针上有哪些区别
    今天小编给大家分享一下go语言和c语言在指针上有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。区别:1、go语言可以...
    99+
    2023-07-04
  • Go中Sync.Map的知识点有哪些
    这篇文章主要讲解了“ Go中Sync.Map的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ Go中Sync.Map的知识点有哪些”吧!sync.Map 优势在 Go 官方文档中...
    99+
    2023-06-15
  • R语言属性知识点有哪些
    这篇文章主要介绍了R语言属性知识点有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。属性(attribute):R中对象具备的特性特性描述了所代表的内容以及R解释该对象的方...
    99+
    2023-06-14
  • R语言中基本语法的知识点有哪些
    这篇文章主要介绍R语言中基本语法的知识点有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们将开始学习R语言编程,首先编写一个“你好,世界! 的程序。 根据需要,您可以在R语言命令提示符处编程,也可以使用R语言脚...
    99+
    2023-06-14
  • C语言函数的知识点有哪些
    这篇文章主要介绍“C语言函数的知识点有哪些”,在日常操作中,相信很多人在C语言函数的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言函数的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-30
  • R语言中字符串有哪些知识点
    这篇文章主要介绍了R语言中字符串有哪些知识点,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在R语言中的单引号或双引号对中写入的任何值都被视为字符串。 R语言存储的每个字符串都...
    99+
    2023-06-14
  • R语言中Rcpp基础知识点有哪些
    这篇文章将为大家详细讲解有关R语言中Rcpp基础知识点有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 相关配置和说明由于Dirk的书Seamless R and C++ Integration ...
    99+
    2023-06-25
  • C语言指针之必须要掌握的指针基础知识
    目录一、指针概述指针的创建指针的大小如何使用指针二级指针二、野指针形成野指针的原因如何规避野指针三、指针的基本运算指针± 整数指针-指针四、指针和数组五、指针数组总结一、指针概述 指...
    99+
    2022-11-12
  • ​ JavaScript的语言知识有哪些
    这篇文章将为大家详细讲解有关 JavaScript的语言知识有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。语言按语法分类首先这里我们先讲一讲泛用的语言...
    99+
    2022-10-19
  • R语言中循环的相关知识点有哪些
    这篇文章主要介绍“R语言中循环的相关知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“R语言中循环的相关知识点有哪些”文章能帮助大家解决问题。repeatrepeat是最存粹的循环,只要不让...
    99+
    2023-07-05
  • JAVA编程语言的基础知识点有哪些
    本篇内容介绍了“JAVA编程语言的基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、面向对象的特征有哪些方面抽象:抽象就是忽...
    99+
    2023-06-17
  • R语言时间序列的知识点有哪些
    这篇文章给大家分享的是有关R语言时间序列的知识点有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。时间序列对象:变量随着时间变化时间序列的回归函数(例如ar或arima)通常以时间序列作为参数许多绘图函数都有针...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作