简单示例

package mainimport "fmt"func main() {var num int = 100var p *int = &num // 指向int类型的指针fmt.Println(*p)   // 解引用,输出 100*p = 200          // 通过指针修改原变量fmt.Println(num)  // 输出 200
}

package mainimport "fmt"func main() {a := 10var p *int  // 声明一个指向int的指针pp = &a      // p存储a的内存地址(p指向a)fmt.Println("a的值:", a)      // 输出:a的值:10fmt.Println("a的地址:", &a)   // 输出:a的地址:0xc00001a0a8(地址值可能不同)fmt.Println("p存储的地址:", p) // 输出:p存储的地址:0xc00001a0a8(和a的地址相同)fmt.Println("p指向的值:", *p)  // 输出:p指向的值:10(通过指针访问a的值)// 通过指针修改a的值*p = 20fmt.Println("修改后a的值:", a)  // 输出:修改后a的值:20
}

函数中使用指针

如果想在函数内部修改外部变量的值,需要传递指针:

package mainimport "fmt"// 传递指针参数
func addOne(p *int) {*p = *p + 1  // 修改指针指向的变量的值
}func main() {x := 5addOne(&x)   // 传递x的地址fmt.Println(x)  // 输出:6(x的值被函数内部修改了)
}

数组指针的基本用法

数组指针

可以直接通过指针修改数组元素(Go 会自动解引用),但无法改变数组的长度(数组长度固定)。

package mainimport "fmt"func main() {// 定义一个数组arr := [3]int{10, 20, 30}// 声明一个数组指针,指向arrvar p *[3]int = &arr// 打印指针存储的地址(数组的地址)fmt.Println("数组地址:", p)  // 类似 0xc00001a0c0// 通过指针访问数组元素(两种方式都可以)fmt.Println(p[0])   // 直接用指针[索引],输出 10fmt.Println((*p)[1])// 先解引用再访问,输出 20(和上面效果一样)// 通过指针修改数组元素p[2] = 300fmt.Println(arr[2]) // 输出 300,原数组被修改了
}

    切片指针

    需先解引用指针才能操作切片元素,且可以修改切片的长度、容量或底层数组(通过 append 等操作)。

    s := []int{1, 2, 3}
    p := &s         // 切片指针 *[]int
    (*p)[0] = 100   // 必须解引用才能修改元素(不能直接 p[0])
    *p = append(*p, 4) // 修改切片本身(长度变为4)
    fmt.Println(s)  // 输出 [100 2 3 4]

    函数中使用数组指针

    package mainimport "fmt"// 接收数组指针参数
    func modifyArray(p *[3]int) {p[0] = 100  // 修改数组第一个元素
    }func main() {arr := [3]int{1, 2, 3}modifyArray(&arr)  // 传递数组的地址fmt.Println(arr)   // 输出 [100 2 3],原数组被修改
    }

    ** 指针的指针

    func main() {num := 10p := &num    // 一级指针(*int)pp := &p     // 二级指针(**int)**pp = 20    // 通过二级指针修改原变量fmt.Println(num) // 输出 20
    }

    123

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

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

    相关文章

    java社交小程序源码支持APP多端springboot部署与功能模块详解

    构建一个支持 多端访问、实时互动、商城交易 的综合型应用,已成为众多企业和开发团队的共同目标。由 宠友信息技术有限公司 打造的 友猫社区,正是基于 Spring Boot 技术栈 的全端解决方案,既能支持 微信小程序、APP、PC管理后台,又…

    代理连接性能优化:提升网络效率的关键技术与实践

    在当今数字化时代,代理连接性能优化已成为网络架构设计中的关键环节。本文将深入探讨如何通过技术手段提升代理服务器的响应速度、稳定性和资源利用率,帮助读者构建高效可靠的代理网络体系。 代理连接性能优化:提升网络效率的关键技术与实践 …

    Rust 元组

    简介 元组可以由多种类型组成,长度固定。 创建元组 // 固定类型 let tup1: (i32, f64, u8) (500, 8.8, 1);// 不固定类型 let tup2 (500.99, 8.8, 1, 9.99);println!("{}", tup2.0);用模式匹配解构元组 let tup (500.99, 8.8, 1, 9.99); let (x, y…

    突破闭集限制:3D-MOOD 实现开集单目 3D 检测新 SOTA

    【导读】 单目 3D 目标检测是计算机视觉领域的热门研究方向,但如何在真实复杂场景中识别“未见过”的物体,一直是个难题。本文介绍的 3D-MOOD 框架,首次提出端到端的开集单目 3D 检测方案,并在多个数据集上刷新了 SOTA。 目录 …

    Python爬虫数据清洗实战:从杂乱无章到整洁可用

    小伙伴们,做爬虫最头疼的不是抓数据,而是抓回来那一堆乱七八糟的内容!价格里混着符号、日期格式千奇百怪、还有重复和缺失的值,看着就头大。别慌,咱们用Python几招就能搞定。Pandas处理表格数据是真香,正则…

    打工人日报#20250906

    打工人日报#20250906 周六了! 今天出门读者特别痛,本来都想爽约了,不过忍下来了了,现在看来很值得! 不过还是要好好吃早餐、和热水! 阅读 《小米创业思考》 第一章 奇迹时代 看完了 就是快呀 好的产品 好的…

    小型磨床设计cad+三维图+设计说明书

    摘 要 随着现代加工技术的发展,各种各样的加工技术得到了广泛的应用,磨床在机械制造领域得到了广泛的应用,本文经过查阅相关文献,完成了一种小型磨床的结构设计。 本文设计的小型磨床其主要是由三部分组成的,第一部分…

    音响皇帝BO,牵手全球第一AR眼镜雷鸟,耳机党坐不住了?

    【潮汐商业评论/原创】自AI大模型技术实现突破以来,即引发一场终端革命,关于下一个智能终端入口,或者说关于下一代计算平台,市场有过很多“狼来了”的声音,大家纷纷猜测,在智能手机之后,究竟谁有…

    中断和异常

    中断和异常简介 在计算机体系结构和操作系统中,中断(Interrupt) 和 异常(Exception) 是CPU应对突发事件、实现多任务并发和错误处理的核心机制。二者均通过暂停当前任务、转去执行特定处理程序来响应事件,但…

    Fab资源快速导入UE

    有时候在Epic启动器导入进度会卡住可以直接使用ue内置Fab来导入资源 这样是百分百能导入的

    Python错误测试与调试——文档测试

    Doctest 通过解析文档字符串(docstring)中的交互式 Python 代码片段(以 >>>开头)进行测试,验证代码输出是否与预期一致。测试用例直接嵌入代码中,实现“文档即测试”核心语法:def func…

    c#核心笔记

    111,面向对象 1,面向过程编程:是一种以过程为中心的编程思想分析出解决问题所需要的步骤然后用函数把步骤一步一步实现使用的时候,一个一个依次调用。 2,面向对象编程:面向对象是一种对现实世界理解和抽象的…

    【MySQL】从零开始了解数据库开发 --- 初步认识数据库

    永远记住,你的存在是有意义的, 你很重要, 你是被爱着的, 而且你为这个世界带来了无可取代的东西。 -- 麦克西 《男孩、鼹鼠、狐狸和马》-- 从零开始了解数据库开发安装MySQL什么是数据库常见主流数据库初步了解SQL语句存储引擎安装…

    Altium Designer(AD24)切换工作界面为浅灰色的方法

    🏡《专栏目录》 目录 1,概述 2,界面介绍 1,概述 本文演示AD24软件黑色界面切换为浅灰色的方法。 2,界面介绍 第1步:点击设置小图标,然后点击View 第2步:在UI Theme,点击Current旁边的Altium Dark Gtay ,在下拉选项中选择Altium Light Gtay,然后点击OK确认 第4步…

    SDRAM详细分析—07 存储器阵列寻址

    大家好,这里是大话硬件 这篇文章将分析实际SDRAM内部是如何进行寻址以及内存单元分布方式。 根据前面的内容,从小容量到大容量进行迭代分析。 1. 1bit容量 这个存储单元只能存储1个bit位。假设现在需要8bit内存容量颗粒,则需要8颗这样的存储器件。 2. 4bit容量 这个存储…

    【GitOps】Argo CD高级操作钩子

    Argo CD高级操作钩子 文章目录Argo CD高级操作钩子资源列表一、Argo CD钩子1.1、钩子介绍1.2、构建的几个执行阶段1.3、钩子删除策略1.4、示例二、钩子演示2.1、创建GitLab公共仓库2.2、Argo CD创建Application2.3、同步(SYNC)资源列表 操作系统配置主机…

    谙流 ASK 技术解析(一):秒级扩容

    谙流 ASK 是谙流团队自主研发的国产新一代云原生流平台,与 Apache Kafka 100% 协议兼容,全栈自主可控,专注私有化部署与行业场景赋能。传统Kafka存储之殇IO模型缺陷每个分区对应独立文件,采用单分区异步批量顺序写机制。当多分区并…

    从挑西瓜到树回归:用生活智慧理解机器学习算法

    一、生活中的决策树:妈妈的挑瓜秘籍夏天的菜市场里,妈妈总能精准挑出最甜的西瓜。她的秘诀是一套简单的决策流程:先看色泽,青绿有光泽的优先;再敲一敲,声音沉闷的更可能熟;最后摸硬度&#xff0…

    SpringBoot+PDF.js实现按需分片加载(包含可运行样例源码)

    SpringBootPDF.js实现按需分片加载前言一、实现思路与实现效果1.1 pdf.js的分片加载的实现思路1.2 pdf分片加载的效果二、前端项目2.1 项目引入2.2 核心代码2.3 项目运行三、后端项目3.1 项目结构3.2 核心代码3.3 项目运行四、项目运行效果4.1 首次访问4.2 分片加载五、项目优化…

    常见Bash脚本漏洞分析与防御

    引言 在Unix/Linux系统中,Bash脚本因其简洁、高效而成为自动化任务、系统管理和快速原型开发的首选工具。然而,Bash的强大功能和其独特的语法特性,也为安全漏洞埋下了隐患。许多开发者在追求便捷性的过程中,无意间引入了命令注入、…