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


猜你喜欢
- 1.sorted函数按key值对字典排序先来基本介绍一下sorted函数,sorted(iterable,key,reverse),sort
- 1.线性与非线性回归线性回归 Linear Regression:两个变量之间的关系是一次函数关系的—&mdas
- 前言setTimeout,前端工程师必定会打交道的一个函数。它看上去非常的简单,朴实,有着一个很不平凡的名字--定时器。其实网上关于Java
- 单继承时super()和__init__()实现的功能是类似的class Base(object):def __init__(self):p
- 一、什么是组件组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。二、组件用法
- 分析在Python中,字符串是不可变的。所以无法直接删除字符串之间的特定字符。所以想对字符串中字符进行操作的时候,需要将字符串转变为列表,列
- 就来总结一下简单的东西备注:一下的方法都是包裹在一个EventUtil对象里面的,直接采用对象字面量定义方法了。。。①添加事件方法addHa
- 项目结构如下:开始时在setting.py中设置如下;html文件中的写法如下:这样设置一直无法加载静态文件,只需要修改setting.py
- 在前面已经学习了gin框架如何处理请求,解析请求,返回数据。在实际的项目当中,项目往往是以模块化来进行划分和开发的,所谓的模块化就是按照功能
- 在进行PHP编程时,需要对服务器某个目录下面的文件进行浏览,通常成为遍历目录。取得一个目录下的文件和子目录,就需要用到opendir()函数
- 放到公用调用文件(如conn数据库链接文件),对所有GET或POST的数据进行过滤特殊字符串,以实现简单有效的SQL注入过滤Function
- 一、基本用法Queue类实现了一个基本的先进先出容器。使用put()将元素增加到这个序列的一端,使用get()从另一端删除。具体代码如下所示
- 关于Event:mysql5.1版本开始引进event概念。event既“时间触发器”,与triggers的事件触发不同,event类似与l
- 事务安全 transaction事务 transaction 访问可能更新数据库中各种数据项的一个程序执行单元unit事务由事务开始(beg
- create proc addcolumn@tablename varchar(30), --表名@colname varchar(30),
- 做开发总得用到数据吧,Linux作为服务器,总得有一个数据库来存储测试用的数据,所以呢,这里附上CentOS6、7安装MySQL5.7的教程
- 数据库是应用开发中必须要掌握的技巧,通常在数据库开发过程中,会有两种不同的方式:直接使用SQL语句,这种方式下,直接编写SQL,简单直观,但
- 如下所示:a = [0,1,2,3,4,5,6,7,8,9]b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象b
- lxmllxml 是 Python 的一个库,用于解析和呈现 XML 和 HTML。它支持多种内置和第三方 XML 和 HTML 标记,例如
- Pandas如何将带有字符串元素的列拆分为多个列。使用以下字符串的方法。str.split():用定界符分割str.extract():按正