# 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 生成)

相关推荐
IT_陈寒3 分钟前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
小强库计算机毕业设计12 分钟前
SpringBoot+Vue3 学生宿舍管理系统实战
java·spring boot·后端·vue·学生宿舍管理系统
小狼18318 分钟前
实践6|SDD 实战:AI 写的规格被推翻了四次
后端·claude
篮框坏了19 分钟前
"DeepSeek Harness 实测:一毛钱干三活,但默认配置是个坑"
后端·ai编程
jobBridge2130 分钟前
大模型到底是怎么"想"的?我把 Transformer 拆开,发现它其实是个"接词狂魔"
人工智能·后端·编程语言
库玛西37 分钟前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
liulilittle1 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
唐青枫1 小时前
看懂内存地址之后,才算真正入门 Zig:指针、切片与实战
后端
朋克洛德的码农1 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
fulton2 小时前
为什么不用现成的开源工具?NovelOps与6大AI写作工具横向对比
后端