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

文章目录

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

大家好~前面我们已经学了变量、函数、流程控制,今天正式进入 Go 指针 的世界!

很多新手觉得指针难,但其实指针就是 内存的门牌号,超级直观、超级简单。

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

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


一、指针到底是什么?

指针 = 内存地址

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

  • 每一间宿舍 = 一块内存

  • 房间号 = 内存地址

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

指针 = 存 "房间号" 的变量

特点:

  • 指针本质是一个大整数

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

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


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

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

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

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

口诀:

&拿地址, *拿内容


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

go 复制代码
package main

import "fmt"

func main() {
    a := 10
    ptr := &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)
}

运行结果:

Plain 复制代码
a 的值:10
a 的地址:0xc0000a0080
ptr 存储的地址:0xc0000a0080
ptr 的类型:*int

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


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

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

go 复制代码
func main() {
    a := 10
    ptr := &a

    fmt.Println(*ptr) // 输出 10

    *ptr = 999 // 通过指针修改 a
    fmt.Println(a) // a 变成 999
}

核心理解:
\*ptr ** 就是变量 a 本身**

修改 \*ptr = 直接修改变量 a 的值。


五、nil 空指针

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

go 复制代码
var ptr *int
fmt.Println(ptr) // <nil>

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

go 复制代码
// 错误
var ptr *int
*ptr = 100 // panic

六、Go 指针的安全限制

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

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

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

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


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

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

go 复制代码
func change(num *int) {
    *num = 999
}

func main() {
    a := 10
    change(&a)
    fmt.Println(a) // 999
}

八、本篇总结

  1. 指针 = 内存地址

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

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

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

  5. 未初始化指针 = nil

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

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


如果你也在 零基础学 Go ,欢迎关注我!

我会持续更新:

✅ Go 基础语法

✅ 指针详解

✅ 数据结构

✅ 顺序表 / 链表 / 栈 / 队列

下一篇:线性表基本原理 + 顺序表 + 链表

👉 点赞 + 收藏 + 关注,更新第一时间不迷路!


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

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
伞伞悦读4 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
ttwuai4 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
大勇前进4 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端
yuzhi_liu4 天前
我用 LangGraph4j 实现 Multi-Agent Supervisor
后端
alsmile4 天前
Node-RED 之外,国产规则引擎的新方案:基于标准语法,Go 先行实现
后端·开源·go