指针基础 - golang版

文章目录

  • 1、指针
  • 2、基础语法
    • [2.1 定义指针](#2.1 定义指针)
    • [2.2 取地址操作符 `&`](#2.2 取地址操作符 &)
    • [2.3 解引用操作符 `*`](#2.3 解引用操作符 *)
  • 3、实战用法
    • [3.1 指针作为函数参数](#3.1 指针作为函数参数)
    • [3.2 指针和结构体](#3.2 指针和结构体)
    • [3.3 指针和接收者](#3.3 指针和接收者)

1、指针

  • 变量是存储值的地方;
  • 指针的值是一个变量的地址;
  • 不是所有的值都有地址,但是所有的变量都有;
  • 使用指针,可以在无须知道变量名字的情况下,间接读取或更新变量的值;

2、基础语法

2.1 定义指针

  • Go 语言中,使用 * 符号来定义指针类型;
golang 复制代码
var ptr *int

2.2 取地址操作符 &

  • 使用 & 符号可以获取一个变量的内存地址;
golang 复制代码
x := 10
ptr := &x // 将 ptr 指向了变量 x 的内存地址

2.3 解引用操作符 *

  • 使用 * 符号可以获取指针指向的变量的值;
golang 复制代码
y := *ptr // 获取指针 ptr 指向的变量的值

3、实战用法

3.1 指针作为函数参数

  • 可以将指针作为函数的参数,以便在函数内部修改调用者传递的变量;
golang 复制代码
func ModifyValueTo100(num int) {
	fmt.Printf("输入 num: %v\n", num)
	modifyValue(&num)
	fmt.Printf("修改后 num: %v\n", num)
}

func modifyValue(ptr *int) {
	*ptr = 100
}

3.2 指针和结构体

  • 结构体字段可以是指针类型,这样可以减少复制大型结构体的开销;
  • 同时可以在函数中修改结构体的字段值;
golang 复制代码
type Person struct {
    Name string
    Age  int
}

func main() {
    p := &Person{Name: "Alice", Age: 25}
    fmt.Println(p.Name)  // 输出 "Alice"
    p.Name = "Bob"       // 修改结构体字段的值
    fmt.Println(p.Name)  // 输出 "Bob"
}

3.3 指针和接收者

  • 在方法定义中,可以使用指针作为接收者,这样可以在方法内部修改接收者的值;
golang 复制代码
type Counter struct {
    count int
}

func (c *Counter) Increment() {
    c.count++
}
相关推荐
努力的小雨4 分钟前
别再复制日志给AI了!我让Codex自己去观测云查报错
后端
afumu2 小时前
Go 写一个只监听 127.0.0.1 的控制服务:鉴权、白名单、危险命令拦截
后端·安全·go
johnjincaaaa3 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端
用户4702784004053 小时前
C语言编译与链接
后端·开源
你三大爷3 小时前
从 Hessian 迁移到 protostuff:深嵌套模型反序列化耗时与高并发类加载锁的根治实战
后端·架构
IT枫斗者枫哥3 小时前
子线程断言失败,JUnit 为什么还显示通过?
java·后端
码农小河664 小时前
基于PHP的电商后台蜜罐系统
开发语言·php
starzy19904 小时前
深入理解Scala柯里化函数:函数链式变换
开发语言·scala
stark张宇5 小时前
Vibe Coding 入门实战:用 Claude Code 跑通 AI 产品开发流程(上)
后端·claude·vibecoding
ShineWinsu5 小时前
对于Qt:QTreeWidget常见属性以及QTreeWidgetItem类的解析
开发语言·c++·qt·gui·客户端·多叉树·qtreewidget