【Go语言基础【12】】指针:声明、取地址、解引用

发布时间:2026/11/3 1:24:48

【Go语言基础【12】】指针:声明、取地址、解引用 文章目录零、概述指针 vs. 引用类比其他语言一、指针基础概念二、指针声明与初始化三、指针操作符1. 取地址拿到内存地址2. *解引用拿到值四、空指针nil五、指针作为函数参数六、多维指针指针的指针七、指针与切片/Map的关系1. 切片slice2. Map(make初始化)八、注意事项1. 禁止指针运算2. 避免空指针解引用3. 指针与值类型的选择零、概述指针 vs. 引用类比其他语言特性指针Go引用C本质存储地址的变量变量的别名无独立地址空值支持nil必须指向有效变量操作符取地址*解引用声明引用直接操作可变性可重新指向其他变量初始化后不可更改指向一、指针基础概念Go语言中的指针Pointer用于存储变量的内存地址是实现高效数据操作的重要工具。与C语言相比Go指针具有以下特点安全性不支持指针运算如指针加减整数避免非法内存访问。简化性通过取地址、*解引用语法简洁。空指针默认值为nil避免野指针问题。指针与变量的关系变量存储数据值占据内存空间可通过获取地址。a:10// 变量a存储值10addr:a// addr存储a的地址如0xc00001a0b8指针专门存储地址的变量类型为*TT为目标数据类型。varptr*int// 声明指向int的指针ptra// 指针ptr指向变量a的地址二、指针声明与初始化1.声明指针变量varptr*int// 指向int的指针varstrPtr*string// 指向string的指针vararrPtr*[5]int// 指向数组的指针2.初始化为空指针varnilPtr*int// 初始值为nil空指针fmt.Println(nilPtrnil)// true3.使用new函数初始化new(T)用于分配类型为T的零值内存返回*T类型指针。 ptr:new(int)// 分配int类型内存值为0*ptr20// 通过解引用赋值fmt.Println(*ptr)// 输出204.直接赋值初始化 a:10ptr:a// 指针直接指向已有变量的地址三、指针操作符1.取地址拿到内存地址获取变量的内存地址返回对应类型的指针。a:helloaddr:a// addr类型为*string存储a的地址*addr1212fmt.Println(*addr)hello12122.*解引用拿到值通过指针获取目标变量的值或修改目标变量的值。ptr:new(int)// ptr类型为*int指向值为0的int*ptr100// 通过解引用修改值fmt.Println(*ptr)// 输出100四、空指针nil定义未指向任何有效内存的指针默认值为nil。作用避免野指针明确表示指针未初始化。判断varptr*intifptrnil{fmt.Println(指针未初始化)// 会执行}五、指针作为函数参数通过指针传递参数可在函数内部修改原始变量的值避免值传递的拷贝开销。funcmodify(ptr*int){*ptr200// 通过解引用修改指针指向的值}funcmain(){a:100modify(a)// 传递a的地址fmt.Println(a)// 输出200原始变量已修改}六、多维指针指针的指针指针的指针用于存储指针变量的地址语法为**T二维指针、***T三维指针等。funcmain(){a:10// 变量aptr1:a// 一维指针*int指向aptr2:ptr1// 二维指针**int指向ptr1ptr3:ptr2// 三维指针***int指向ptr2// 通过多维指针修改原始值**ptr220// 等价于*ptr1 20即a 20***ptr330// 等价于**ptr2 30即*ptr1 30a 30fmt.Println(a)// 输出30}七、指针与切片/Map的关系1. 切片slice切片本身是引用类型其底层结构体包含指针指向底层数组。s:[]int{1,2,3}ptr:s// ptr类型为*[]int指向切片本身非底层数组fmt.Println(ptr)//[1 2 3]2. Map(make初始化)Map也是引用类型声明后需通过make初始化指针操作与切片类似。m:make(map[string]int)ptr:m// ptr类型为*map[string]int八、注意事项1. 禁止指针运算Go不支持指针加减整数、指针比较大小等操作避免内存越界。ptr:new(int)ptr// 编译错误invalid operation: ptr (non-numeric type *int)2. 避免空指针解引用对nil指针执行解引用会导致运行时恐慌panic。varptr*int// nil指针fmt.Println(*ptr)// panic: runtime error: invalid memory address or nil pointer dereference3. 指针与值类型的选择值类型如int、struct默认值传递修改需用指针。引用类型如切片、map、通道本身包含指针传递时无需额外取地址。
延伸阅读

更多相关文章

2026/11/3 1:24:48

【Go语言基础【14】】defer与异常处理(panic、recover)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:24:48

PP-OCRv5_server_det_onnx开发者指南:如何扩展和定制文字检测功能

PP-OCRv5_server_det_onnx开发者指南:如何扩展和定制文字检测功能 PP-OCRv5_server_det_onnx是飞桨PaddlePaddle推出的高效文字检测工具,基于ONNX格式模型,专为服务端部署优化。本文将详细介绍如何扩展和定制其文字检测功能,帮助…

2026/11/3 1:19:48

【线性代数】【第二章】矩阵习题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 2:24:51

folia-major 安装与首次跑通指南:30 分钟点亮全屏歌词动画

folia-major 安装与首次跑通指南:30 分钟点亮全屏歌词动画 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia(仓库名…

2026/11/3 2:24:51

5分钟装好网盘直链下载助手:8大网盘直链解析一步到位

5分钟装好网盘直链下载助手:8大网盘直链解析一步到位 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…

2026/11/3 2:19:51

理解 GC Roots:对象为什么不能被回收

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑