go语言学习之旅之Go 语言指针

学无止境,今天继续学习go语言的基础内容
Go语言支持指针,允许你在程序中直接操作变量的内存地址。指针存储了变量的内存地址,通过指针,你可以直接访问或修改该地址上的值。
学习过c语言的一定知道指针

定义指针

在Go语言中,使用 * 符号来声明指针。例如:

package mainimport "fmt"func main() {var x int = 42var pointerToX *intpointerToX = &x // 获取 x 的地址fmt.Println("Value of x:", x)fmt.Println("Address of x:", &x)fmt.Println("Value at the address stored in pointerToX:", *pointerToX)
}

在这里插入图片描述

指针的零值

未初始化的指针的值是 nil。在尝试访问指向的地址之前,确保将指针初始化为某个有效的地址。

var pointer *int // nil 指针

使用 new 函数创建指针

可以使用 new 函数创建一个新的变量并返回其地址。这个函数返回的是一个指向新分配的零值的指针。

package mainimport "fmt"func main() {pointer := new(int)fmt.Println("Value at the address stored in pointer:", *pointer)
}

指针作为函数参数

指针常用于函数参数,以便在函数内部修改函数外部的变量。

package mainimport "fmt"func double(x *int) {*x = *x * 2
}func main() {value := 10double(&value)fmt.Println("Doubled value:", value)
}

空指针检查

在使用指针之前,通常需要检查指针是否为 nil

package mainimport "fmt"func main() {var pointer *intif pointer != nil {fmt.Println("Value at the address stored in pointer:", *pointer)} else {fmt.Println("Pointer is nil.")}
}

指针数组和指向指针的指针

Go语言支持指针数组和指向指针的指针,这些概念使得在处理多级数据结构时更为灵活。

package mainimport "fmt"func main() {numbers := [3]int{1, 2, 3}var pointerArray [3]*intfor i, num := range numbers {pointerArray[i] = &num}fmt.Println("Values in the array:")for _, pointer := range pointerArray {fmt.Println(*pointer)}// 指向指针的指针var pointerToPointer **intpointerToPointer = &pointerArray[0]fmt.Println("Value at the address stored in pointerToPointer:", **pointerToPointer)
}

指针在某些情况下非常有用,但同时也需要小心使用,以避免潜在的错误

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157286.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于标准库中的string类 - c++

目录 关于string类 string类的常用接口 string类常用接口的简单模拟实现 关于string类 string类在cplusplus.com的文档介绍 1. string是表示字符串的字符串类 2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 3. string在…

shell条件语句

一.条件测试 1.三种测试方法 ①test命令测试 ②[ ]测试(注意前后需要有空格) ③[[ ]]:加强版[ ],测试支持通配符(匹配字符串)和正则表达式 二.条件语句 2.1 test命令 测试特定的表达式是否成立…

谷歌浏览器任意文件访问漏洞(CVE-2023-4357)复现

1.漏洞级别 高危 2.漏洞描述 该漏洞的存在是由于 Google Chrome中未充分验证 XML 中不受信任的输入。远程攻击者可利用该漏洞通过构建的 HTML 页面绕过文件访问限制&#xff0c;导致chrome任意文件读取。 总结&#xff1a;一个XXE漏洞 3.利用范围 Google Chrome < 116.…

px4+vio实现无人机室内定位

文章主要讲述px4 如何利用vins_fusion里程计数据实现在室内定位功能。 文章基于以下软、硬件展开。 硬件软件机载电脑&#xff1a; Intel NUC系统&#xff1a;Ubuntu 20.04相机&#xff1a; Intel Realsense D435iros&#xff1a;noetic飞控&#xff1a;Pixhawk 2.4.8固件&am…

服务器系列之 成功解决 com.jcraft.jsch.JSchException: Auth fail

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 &#x1f3f7;️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

如何使用rclone将腾讯云COS桶中的数据同步到华为云OBS

在多云策略与数据迁移趋势下&#xff0c;企业往往需要将数据在不同云服务提供商之间进行迁移。本文介绍如何使用rclone工具同步腾讯云COS&#xff08;Cloud Object Storage&#xff09;桶中的数据到华为云OBS&#xff08;Object Storage Service&#xff09;。先决条件是您已经…

Python---函数的应用案例(多个)

案例&#xff1a;使用print方法打印一条横线 print(- * 40) 案例&#xff1a;对上个案例进行升级&#xff0c;可以根据输入的num数值&#xff0c;生成指定数量的横线 def print_lines(num, length):""" print_lines函数主要作用用于生成多条指定长度的横线&…

快速幂极简写法快速幂求逆元

快速幂原理介绍 快速幂模板 int qmi(int a, int k, int p) {int res 1;while (k) {//后面的a其实是底数与其指数的运算结果了&#xff0c;是不断迭代的//第一个a其实就是a的2的0次方if (k & 1) res (res * a) % p;a (a * a) % p;//注意&#xff0c;a是一个不断变化的过…

Linux操作系统使用及C高级编程-D9D10Linux 服务搭建与使用

TFTP服务器 TFTP&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议&#xff0c;是TCP/IP协议中一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。端口号为69 1、使用客户服务器方式和使用UDP数据…

python趣味编程-5分钟实现一个简单弹跳球游戏(含源码、步骤讲解)

简单的Python弹跳球程序是使用Python编程语言开发的。 Python 中的弹跳球游戏是 使用 Tkinter 和图形用户界面 (GUI) 设计的,它是一个桌面应用程序。 Python 中的弹跳球游戏代码使用Canvas 在 Python 中绘制对象和随机模块。

UVM项目笔记——通过寄存器模型实现AHB接口的寄存器读写(内含源码)

目录 1.前言 2.DRIVER实现 2.1 AHB二级流水时序 2.2 “队列错位法”实现driver 2.3 driver代码 2.4 仿真log与波形 2.5 多级流水拓展方法 1.前言 UVM driver在接口协议的实现中起着非常重要的作用&#xff0c;因为它一端处理基于类的事务级sequence&#xff0c;另一端处…

Pytorch从零开始实战10

Pytorch从零开始实战——ResNet-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet-50算法实战环境准备数据集模型选择开始训练可视化模型预测总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c…

QT专栏2 -Qt for Android

#2023年11月18日 # Qt version 6.6 JDK17 JDK 安装 Java Downloads | Oracle 设置环境变量 鼠标右键我的电脑&#xff0c;出现如下界面 Qt配置 改用JDK18&#xff0c;没有乱码&#xff0c;由于不影响APK产生。 做了好多尝试&#xff0c;更换JDK版本(11,18,19,21)&…

labelImg

labelImg 在anaconda虚拟环境中安装labelImg 进入conda虚拟环境DL2中 输入命令&#xff1a; pip install PyQt5 pip install pyqt5-tools pip install lxml pip install labelimg PyQt5:是用于创建GUI应用程序的跨平台工具包&#xff0c;它将Python与Qt库融为一体 Lxml&#…

GDB Debugging Notes

1 Debugging programs using gdb 1.1 gdb简介 gdb是一个功能强大的调试工具&#xff0c;可以用来调试C程序或C程序。在使用这个工具进行程序调试时&#xff0c;主要涉及下面几个方面的操作&#xff1a; 启动程序:在启动程序时&#xff0c;可以设置程序运行环境。设置断点:程序…

Double 4 VR智能互动系统在轨道交通实训教学中的应用

Double 4 VR智能互动系统是一种集成了虚拟现实技术、人工智能和物联网技术的教学系统。计算机通过模拟真实的轨道交通环境&#xff0c;为学生提供了一个高度仿真的学习环境&#xff0c;帮助他们更好地理解和掌握轨道交通的相关知识和技能。 首先&#xff0c;Double 4 VR智能互动…

composer切换全局镜像源的方法

composer 默认配置中的镜像地址为国外的&#xff0c;在下载一些依赖包的时候会感觉很慢。当然国内也有很多composer镜像地址的&#xff0c;比如阿里云&#xff0c;腾讯云等。下面的博文73so博客就和大家说说&#xff0c;如何将composer的默认镜像改为国内镜像源的方法。 compo…

Redis跳跃表

前言 跳跃表(skiplist)是一种有序数据结构&#xff0c;它通过在每一个节点中维持多个指向其他节点的指针&#xff0c;从而达到快速访问节点的目的。 跳跃表支持平均O(logN)&#xff0c;最坏O(N)&#xff0c;复杂度的节点查找&#xff0c;还可以通过顺序性来批量处理节点…

2021秋招-算法-递归

算法-递归 教程: ⭐告别递归&#xff0c;谈谈我的一些经验 LeetCode刷题总结-递归篇 基础框架 leetcode刷题 1.leetcode-101. 对称二叉树-简单 101. 对称二叉树 给定一个二叉树&#xff0c;检查它是否是镜像对称的。 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。…

子虔与罗克韦尔自动化合作 进博会签约自动化净零智造联创中心

11月6日进博会现场&#xff0c;漕河泾罗克韦尔自动化净零智造联创中心合作协议签约暨合作伙伴&#xff08;第一批&#xff09;授牌仪式举办&#xff0c;子虔科技作为联创中心合作伙伴签约&#xff0c;携手共建智能制造&#xff0c;引领行业可持续发展。 图示&#xff1a;子虔科…