💜 想真正擅长编程? 从一门课程开始,100% 免费

《笔记》第八篇 Go指针说明

第08讲 Go指针说明

本讲义根据视频实际讲解内容整理

一、本讲概述

本讲从内存存储的角度引入指针概念,讲解了指针的本质——"一个指针的值是另一个变量的地址"。通过代码演示了取地址(&)、解引用(*)操作,以及通过指针修改原始变量值的过程。


二、指针的核心概念

2.1 变量与内存

老师强调:变量存储在内存中。每个普通变量在内存中都有一个对应的存储空间,绑定到一个变量名(如 x)。

2.2 什么是指针

"一个指针的值是另一个变量的地址。"

  • 指针变量存储的不是普通的数据值,而是另一个变量在内存中的地址
  • 通过指针,可以间接访问和修改对应地址上的数据

2.3 为什么要用指针

老师用一个形象的比喻来解释指针的价值:

  • 如果多个地方需要共享同一份数据,不用指针的话,每次都要在内存中开辟新的空间拷贝数据
  • 使用指针后,多个变量可以指向同一个内存地址,修改一处,所有引用处都能看到变化
  • 这就像"同一个地址",大家共享同一份数据

三、指针的基本操作

3.1 取地址运算符 &

Go
package main

import "fmt"

func main() {
    var x int = 1
    var p *int = &x  // p 存储的是 x 的内存地址

    fmt.Println(p)  // 输出类似 0xc00001a0b0(16进制地址)
}
  • &x 表示取变量 x 的内存地址
  • p 是一个指向 int 类型的指针变量
  • 打印 p 时,输出的是一串以 0x 开头的十六进制地址

3.2 解引用运算符 *

Go
fmt.Println(*p)  // 输出 1,即 x 的值
  • *p 表示取出指针 p 所指向地址上存储的值
  • 老师强调:"解引用取地址对应的值"

3.3 通过指针修改值

Go
package main

import "fmt"

func main() {
    var x int = 1
    var p *int = &x

    fmt.Println("x =", x)         // x = 1
    fmt.Println("p指向的值 =", *p)  // 1

    *p = 2  // 通过指针修改地址上的值

    fmt.Println("修改后 x =", x)   // x = 2
}

老师演示了关键操作:

  1. p = &x:让指针 p 指向 x 的内存地址
  2. *p = 2:通过指针修改该地址上的值
  3. 最终 x 的值变成了 2

"通过指针修改地址上的值,x 的值最终也变了。"


四、指针要点总结

概念 符号 说明
取地址 &x 获取变量 x 的内存地址
解引用 *p 获取指针 p 指向地址上的值
指针赋值 p = &x 让指针 p 指向 x
通过指针修改 *p = 2 修改 p 指向地址上的值

核心理解

  1. 指针保存的是地址,不是具体的值
  2. 地址不变,值可变:改变指针指向的值,原变量的值也会改变
  3. 共享内存:多个指针可以指向同一个地址,实现数据共享
  4. 打印指针时看到的是 0x 开头的十六进制地址

五、小结

本讲通过实际代码演示了 Go 语言指针的基本用法。指针的核心是"保存变量的内存地址",通过 & 取地址、* 解引用,可以实现间接访问和修改数据。老师提到指针虽然不算太复杂,但需要理解内存地址的概念,后续讲解会进一步深入。