news 2026/5/2 6:14:39

# Go 语言指针零基础入门详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
# Go 语言指针零基础入门详解

文章目录

  • Go 语言指针零基础入门详解
  • 一、指针到底是什么?
  • 二、指针的两个核心符号(记牢就成功一半)
  • 三、第一步:取地址(\&)
  • 四、第二步:解引用取值(\*)
  • 五、nil 空指针
  • 六、Go 指针的安全限制
  • 七、指针与函数(最常用场景)
  • 八、本篇总结

Go 语言指针零基础入门详解

大家好~前面我们已经学了变量、函数、流程控制,今天正式进入Go 指针的世界!
很多新手觉得指针难,但其实指针就是内存的门牌号,超级直观、超级简单。

带你彻底搞懂:指针是什么、怎么取地址、怎么解引用、nil 指针、Go 指针安全限制。

适合:零基础、刚学 Go、怕指针、想彻底搞懂内存的同学。


一、指针到底是什么?

指针 = 内存地址

你可以把内存想象成一长排宿舍:

  • 每一间宿舍 = 一块内存

  • 房间号 =内存地址

  • 房间里住的人 =变量的值

指针 = 存 “房间号” 的变量

特点:

  • 指针本质是一个大整数

  • Go 给它单独定义了指针类型\*T

  • 不同类型指针不能混用(\*int ≠ \*string


二、指针的两个核心符号(记牢就成功一半)

Go 语言指针只有两个符号:

  1. & 取地址符→ 拿到变量的内存地址

  2. * 解引用符→ 通过地址访问变量的值

口诀:

&拿地址, *拿内容


三、第一步:取地址(&)

packagemainimport"fmt"funcmain(){a:=10ptr:=&a// 取 a 的地址fmt.Printf("a 的值:%d\n",a)fmt.Printf("a 的地址:%p\n",&a)fmt.Printf("ptr 存储的地址:%p\n",ptr)fmt.Printf("ptr 的类型:%T\n",ptr)}

运行结果:

a 的值:10 a 的地址:0xc0000a0080 ptr 存储的地址:0xc0000a0080 ptr 的类型:*int

结论:
ptr = \&a→ ptr 就是 a 的地址。


四、第二步:解引用取值(*)

通过指针访问 / 修改变量:

funcmain(){a:=10ptr:=&a fmt.Println(*ptr)// 输出 10*ptr=999// 通过指针修改 afmt.Println(a)// a 变成 999}

核心理解:
\*ptr** 就是变量 a 本身**
修改\*ptr= 直接修改变量 a 的值。


五、nil 空指针

未初始化的指针 =nil(空)。

varptr*intfmt.Println(ptr)// <nil>

⚠️禁止对 nil 解引用,会直接崩溃。

// 错误varptr*int*ptr=100// panic

六、Go 指针的安全限制

Go 为了安全,对指针做了严格限制:

  1. 不支持指针算术运算
    ptr\+\+ptr\+1都不行

  2. 不同类型指针不能混用
    \*int不能转\*string

  3. 类型必须严格匹配
    \*int只能指向int变量


七、指针与函数(最常用场景)

Go 默认值传递,要修改外部变量必须传指针。

funcchange(num*int){*num=999}funcmain(){a:=10change(&a)fmt.Println(a)// 999}

八、本篇总结

  1. 指针 = 内存地址

  2. \&amp;变量→ 取地址

  3. \*指针→ 取值 / 修改

  4. 指针类型:\*int\*string\*bool

  5. 未初始化指针 =nil

  6. Go 指针安全,不支持运算

  7. 函数要修改外部变量 → 传指针


如果你也在零基础学 Go,欢迎关注我!
我会持续更新:
✅ Go 基础语法
✅ 指针详解
✅ 数据结构
✅ 顺序表 / 链表 / 栈 / 队列

下一篇:线性表基本原理 + 顺序表 + 链表
👉 点赞 + 收藏 + 关注,更新第一时间不迷路!


(注:文档部分内容可能由 AI 生成)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 6:10:53

从JPEG到YUV420:手把手教你用stb_image库实现视频处理前的图像格式转换

从JPEG到YUV420&#xff1a;手把手教你用stb_image库实现视频处理前的图像格式转换 在视频编解码和流媒体开发领域&#xff0c;图像格式转换是一项基础但至关重要的技能。当我们需要处理视频帧数据时&#xff0c;经常会遇到将常见的RGB/RGBA格式转换为YUV420格式的需求。这种转…

作者头像 李华
网站建设 2026/5/2 6:06:24

基于vue的健身管理计划平台[vue]-计算机毕业设计源码+LW文档

摘要&#xff1a;本文阐述了一个基于Vue框架开发的健身管理计划平台的设计与实现过程。该平台旨在为健身房管理人员和用户提供高效的信息管理交互渠道&#xff0c;具备系统用户管理、留言管理、健身计划管理以及健身知识管理等功能。通过该平台&#xff0c;能够提升健身房的管理…

作者头像 李华
网站建设 2026/5/2 5:42:41

Go 语言从入门到进阶 | 第 24 章:项目架构与设计模式

系列:Go 语言从入门到进阶 作者:耿雨飞 适用版本:go v1.26.2 前置条件 在开始本章学习之前,请确保: 已完成第 23 章的学习,了解 Go 安全编程体系 熟悉接口、结构体、方法和错误处理的基本用法 了解 sync.Once、context.Context 等并发原语 已获取 Go 1.26.2 源码树(go-…

作者头像 李华