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

相关推荐
吃饱了得干活2 分钟前
JVM垃圾回收:从新生代到ZGC,从理论到调优
java·jvm·后端
长不胖的路人甲9 分钟前
二叉排序树(BST)Java 完整实现 + 删除思路详解
java·开发语言·算法
Conan在掘金10 分钟前
鸿蒙报错速查:arkts-no-func-expressions 禁用 function 表达式,用了就炸,根因 + 真解法
后端
geovindu10 分钟前
python: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·python·算法·搜索算法
程序员清风30 分钟前
AI不是万能的,大家要专注实践!
java·后端·面试
刘沅44 分钟前
Redis的哨兵机制
后端·面试
AmazingEgg1 小时前
从 LIKE 到 Elasticsearch:博客搜索引擎可插拔改造全记录
后端
未秃头的程序猿1 小时前
MCP协议火了,但到底怎么用?我花了一个周末用Java接入了5个MCP Server
后端·ai编程·mcp
Cosolar1 小时前
Claude Opus 5 系统提示词被完整泄露,共 135027 字符、约 3.4 万 token
人工智能·后端·架构
Alan_751 小时前
RESTful API 落地的三个核心:资源建模、语义约束与工程化
后端