Golang指针的操作以及常用的指针函数

作者:周小末天天开心 时间:2024-02-08 11:46:49 

指针的操作

在Go语言中,指针是一种非常重要的类型,可以用来传递变量的地址而不是变量本身。

定义指针

在Go语言中,使用*运算符来定义指针。例如,以下是定义一个整型指针的语法:

var ptr *int

获取变量地址

可以使用&运算符获取变量的地址,例如:

var a int = 10
var ptr *int = &a

在这个示例中,ptr变量包含了变量a的地址。

解引用指针

使用*运算符解引用指针,访问指针指向的变量。例如,以下是使用指针访问变量的示例:

var a int = 10
var ptr *int = &a
fmt.Println("a 的值为:", a)
fmt.Println("*ptr 的值为:", *ptr)

在这个示例中,*ptr将访问ptr所指向的变量,也就是a的值。

指针作为函数参数

在函数中可以使用指针作为参数,从而可以修改调用函数时传递的变量的值。例如:

func swap(x *int, y *int) {
   var temp int
   temp = *x    /* 保存 x 地址的值 */
   *x = *y      /* 将 y 赋值给 x */
   *y = temp    /* 将 temp 赋值给 y */
}
func main() {
   /* 定义局部变量 */
   var a int = 100
   var b int= 200
   fmt.Printf("交换前 a 的值 : %d\n", a )
   fmt.Printf("交换前 b 的值 : %d\n", b )
   /* 调用 swap() 函数
    * &a 指向 a 变量的地址
    * &b 指向 b 变量的地址
    */
   swap(&a, &b)
   fmt.Printf("交换后 a 的值 : %d\n", a )
   fmt.Printf("交换后 b 的值 : %d\n", b )
}

在这个示例中,swap()函数使用指针作为参数,从而可以修改main()函数中传递的变量a和b的值。

指针的空值

在Go语言中,指针可以为空,例如:

var ptr *int = nil

在这个例子中,我们创建了一个指向int类型变量的指针p。我们将p初始化为nil,这表示它不指向任何有效的内存地址。然后,我们使用&运算符获取变量x的地址,并将其分配给指针p。最后,我们使用*运算符解除引用p,以获取存储在其指向的地址中的值,并将其存储在变量y中。

请注意,在Go语言中,指针不能进行算术运算,也不能与整数直接相加或相减。此外,在访问指针所指向的值之前,必须确保指针不是nil,否则会导致运行时错误。

常用的指针函数

在 Go 语言中,指针是一个非常重要的概念,可以用于在程序中操作内存,提高程序效率。除了基本的指针运算外,还有一些常用的指针函数可以用于操作指针。

new 函数

new 函数用于创建一个指向某个类型的指针,并返回该指针的地址。下面是一个示例:

func main() {
   var p *int
   p = new(int)
   *p = 10
   fmt.Println(*p)
}

这里使用 new 函数创建了一个 int 类型的指针,并将其赋值给变量 p。然后通过指针 p,对变量进行赋值和输出操作。

make 函数

make 函数用于创建一个类型为切片、映射或通道的对象,并返回该对象的引用。下面是一个示例:

func main() {
   var s []int
   s = make([]int, 5)
   s[0] = 1
   fmt.Println(s)
}

这里使用 make 函数创建了一个长度为 5 的整型切片,并将其赋值给变量 s。然后通过下标操作,对切片中的元素进行赋值和输出操作。

append 函数

append 函数用于向切片中添加元素。它可以接收一个或多个参数,每个参数都是要添加到切片中的元素。下面是一个示例:

func main() {
   var s []int
   s = append(s, 1)
   s = append(s, 2, 3, 4)
   fmt.Println(s)
}

这里首先创建了一个空的整型切片,并使用 append 函数添加了三个元素。最后输出了添加元素后的切片。

copy 函数

copy 函数用于将一个切片的内容复制到另一个切片中。它接收两个参数,第一个参数是要复制到的切片,第二个参数是要复制的切片。下面是一个示例:

func main() {
   s1 := []int{1, 2, 3}
   s2 := []int{4, 5, 6}
   copy(s1, s2)
   fmt.Println(s1)
}

这里创建了两个整型切片 s1 和 s2,并将 s2 的内容复制到 s1 中。最后输出了复制后的 s1。

除了以上常用的指针函数外,还有其他一些常用的指针操作,例如:取地址符 &、指针解引用符 *、指针运算符 + 和 - 等。在使用指针时,需要注意指针是否为空,以及指针是否指向有效的内存地址。同时,也需要注意指针的生命周期,以避免出现野指针等问题。

来源:https://blog.csdn.net/weixin_71646897/article/details/130750155

标签:Golang,指针,指针函数
0
投稿

猜你喜欢

  • Qt数据库应用之实现通用数据生成器

    2024-01-16 00:37:49
  • MySQL 有输入输出参数的存储过程实例

    2024-01-24 23:00:01
  • 值得收藏的10道python 面试题

    2022-04-22 12:10:33
  • Python+OpenCV图像处理—— 色彩空间转换

    2022-02-12 16:28:01
  • js取得当前鼠标的X,Y坐标

    2007-09-27 19:52:00
  • asp 性能测试报告 学习asp朋友需要了解的东西

    2011-03-09 10:57:00
  • 通过JS自动隐藏手机浏览器的地址栏实现原理与代码

    2024-04-28 09:48:51
  • js倒计时代码

    2008-05-07 13:41:00
  • python使用threading获取线程函数返回值的实现方法

    2023-10-28 09:34:21
  • python 调用有道api接口的方法

    2021-11-18 18:51:16
  • Go打包附件内容到执行文件的方法

    2024-04-27 15:32:21
  • pampy超强的模式匹配工具的实现

    2023-03-05 23:05:07
  • js实现九宫格布局效果

    2024-04-19 11:03:42
  • SQLServer 2000 升级到 SQLServer 2008 性能之需要注意的地方之一

    2012-02-25 19:44:26
  • JavaScript面向对象的简单介绍

    2008-06-27 12:37:00
  • WEB2.0网页制作标准教程(11)不用表格的菜单

    2008-02-19 19:36:00
  • javascript中的toFixed固定小数位数 简单实例分享

    2024-05-21 10:20:28
  • ASP将Excel数据导入到SQLServer的实现代码

    2011-03-10 10:38:00
  • Go语言依赖管理三要素示例解析

    2024-05-05 09:32:34
  • Python基于xlrd模块操作Excel的方法示例

    2021-07-18 16:04:06
  • asp之家 网络编程 m.aspxhome.com