当前位置: 首页 > news >正文

Golang指针的基本概念

概念

指针的核心本质就是针对内存地址的操作。

在计算机科学中,内存被组织成一系列连续的存储单元,每个单元都有一个唯一的编号,这个编号就是内存地址。你可以把它想象成一条街上的门牌号,每个房子(内存单元)都有一个唯一的号码(地址)。

指针就是一个变量,其存储的值是另一个变量的内存地址。


不同语言的指针对比:

语言类别指针概念与内存地址的关系
C/C++裸指针直接对应,可直接进行算术运算,非常底层和危险。
Pascal指针类似C,但有更强的类型限制。
C#/Java引用底层是指针,但对程序员完全抽象,无法直接操作地址,由虚拟机/运行时管理。
Go指针支持指针运算,但不支持像C那样任意偏移,更安全。
Python/JS一切皆引用所有变量名都是对对象的引用,语言完全隐藏了内存地址的细节。
Rust引用/裸指针提供安全的引用(编译期检查)和不安全的裸指针,泾渭分明。

实例

package mainimport ("fmt"
)func changeValue(p int) {p = 10
}func main() {var a int = 1changeValue(a)fmt.Println("a = ", a)
}

输出:

go run firstGoProject.go
a =  1

这里参数的传递是值传递:将实际参数的一个副本传递给函数,函数内对参数的修改不会影响原始数据。


package mainimport ("fmt"
)func changeValue(p *int) { //*int p 声明了一个指向整数的指针变量 p。*p = 10                //*p 是解引用操作。它的意思是:“找到指针 p 所保存的地址,然后操作那个地址上的数据”。             //所以 *p = 10; 的意思是:找到地址 0x0843A040,然后把那里的值从 1 改为 10fmt.Println("p = ", p)
}func main() {var a int = 1changeValue(&a)         //&a 是取地址操作,它得到的是变量 a 的地址,即 0x0843A040。fmt.Println("a = ", a)
}

输出:

go run firstGoProject.go
p = 0x0843A040
a =  10

解析

假设内存是一个公寓楼,声明变量a = 1 ——> a是公寓楼 0x0843A040号房间,住进了 “1” 的人。&a就是房间的门牌号  0x0843A040。声明(p *int)是房东记录的一张纸条上面写了a的门牌号。*p 表示房东拿着纸条找到a对应的房间看看里面住的人是谁(此时还是“1”)。*p = 10,“1” 房租到期了,房东把 0x0843A040号房间重新租给“10”。


输出p和&a都会输出a的内存地址(门牌号),*p输出是a的值(房子里住的人),*p = 10(把房间a住的人换成10)输出a会变成a=10。

表达式中文读法含义
a变量 a变量 a 所存储的值
&aa 的地址变量 a 在内存中的地址
p指针 p指针 p 本身存储的值(它是一个地址)
*p解引用 pp 所指向的地址上存储的值(即变量 a 的值)
&pp 的地址指针变量 p 自己在内存中的地址
http://www.dtcms.com/a/423661.html

相关文章:

  • WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
  • 辽宁手机版建站系统开发平面设计学徒
  • 福州做网站制作北京楼市暴跌
  • PG 中 .psqlrc 配置文件使用案例
  • Linux开发——中断
  • 【快乐数六】2022-11-21
  • redis单线程模型
  • 松江新桥网站建设东莞做网站首选企业铭
  • 【Leetcode hot 100】46.全排列
  • C++版搜索与图论算法
  • 天津做网站排名企业网站建设的价格
  • Nginx 反向代理、负载均衡与 Keepalived 高可用
  • nginx upstream的作用
  • BeaverTails数据集:大模型安全对齐的关键资源与实战应用
  • 归并排序、计数排序以及各种排序稳定性总结
  • 【数据结构+算法】迭代深度搜索(IDS)及其时间复杂度和空间复杂度
  • OpenSpeedy下载 - 全平台网盘提速加速工具|官网入口
  • 关于在博客页面添加live2d-widget的一些心得和踩过的坑
  • 2025年,今后需要进步的方面
  • 有哪些做平面设计好素材网站自学it怎么入门
  • Android16 adb投屏工具Scrcpy介绍
  • 酵母展示技术如何重塑酶工程?从定向进化到工业催化的突破
  • 广汉做网站立白内部网站
  • 【FPGA+DSP系列】——(3)中断学习(以定时器中断为例)
  • 重庆网上注册公司网站配置 wordpress
  • ECMAScript 2025 有哪些新特性?
  • CSP-S 提高组 2025 初赛试题解析(第三部分:完善程序题(二)(39-43))
  • 前端实战:基于React Hooks与Ant Design V5的多级菜单系统
  • 单片机OTA升级:高效无线更新的秘密
  • 社区平安建设基层网站重庆企业网站建设官网