指针传引用

指针传引用上图中 main 方法中声明了 a 和 b 两个变量 然后通过 swap2 方法完成值交换 很简单的过程 通过地址值进行引用然后完成交换 图右边是代码的在栈帧的的一个交换过程 大概说一下 首先初始化的 main 方法在栈帧有两个内存空间分别为 0xaa00 和 0xbb00 对应 a 和 b 的变量地址然后运行到调用 swap2 产生栈帧空间 空间内有 x 和 y 两个变量形参 然后 swap2 amp a amp b 去地址值的方式把 a 和 b 的地址给了 swap2 方法 swap2 方法的 x y y x 是做了一个值交换

ath9SL
上图中main方法中声明了a和b两个变量,然后通过swap2方法完成值交换。很简单的过程。(通过地址值进行引用然后完成交换)

图右边是代码的在栈帧的的一个交换过程:

大概说一下:

  1. 首先初始化的main方法在栈帧 有两个内存空间 分别为0xaa000xbb00对应a和b的变量地址
  2. 然后运行到调用swap2 产生栈帧空间,空间内 有x和y两个变量形参。
  3. 然后swap2(&a,&b) 去地址值的方式把a和b的地址给了swap2方法 ,
  4. swap2方法 的*x,*y=*y,*x是做了一个值交换,首先第一个*x是取内存空间(我们之前说过 :等号左边的变量,代表变量所指向的内存空间)这里通俗来说就是*x是去main方法的栈帧下取到a的地址值(0xaa00)。
  5. 第三个*y是根据地址把值取(等号右边的变量,代表变量内存空间存储的数据值)到然后赋值给*x(0xaa00),取得的值为20 转化一下:0xaa00=20

一通百通

再来一个demo

主要看 new, new这个关键字是去(heap)堆内存申请一块内存空间,下面var p=new(*int)申请指针类型的内存 ,返回的是一块内存空间的地址值为0xc00001e090 ,想要给它赋值就必须进行取到0xc00001e090地址的空间*p,然后赋值*p=&i ,这个时候根据*p取得值是i的地址0xc0000be008值不是数据值,想要取得i的值需要再加个*就是p,才能取到i的值。绕的一笔

func main() { 
    var p =new(*int) //p 0xc00001e090 var i int i=1000 *p=&i fmt.Println(&i) // 0xc0000be008 i地址值 fmt.Println(*p) // 0xc0000be008 i地址值 fmt.Println(p) //0xc00001e090 p变量的内存地址值 fmt.Println(**p) // 1000 i的数据值1000 } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229462.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午4:39
下一篇 2026年3月16日 下午4:40


相关推荐

  • 信号实现父子进程之间的同步–sigsuspend的作用

    信号实现父子进程之间的同步–sigsuspend的作用函数原型 include intsigsuspen constsigset t mask 作用 用于在接收到某个信号之前 临时用 mask 替换进程的信号掩码 并暂停进程执行 直到收到信号为止 The nbsp sigsuspend nbsp functionrepl

    2026年3月18日
    3
  • Android P Preview1 兼容要点[通俗易懂]

    AndroidPPreview1,昨天3.8发布,兼容Preview1主要改下targetSdkVersion=28compileSdkVersion为前一个版本(比如27)在AndroidStudio3.2下能完整支持AndroidPPreview1AndroidPPreview1要点1.1约束调用非API接口:比如用JNI、反射来调用一下系统类、方法    Android…

    2022年4月15日
    47
  • apache 虚拟主机配置详解_linux 配置虚拟主机

    apache 虚拟主机配置详解_linux 配置虚拟主机文章目录Apache虚拟主机企业应用部署一个端口不同域名调试worker工作模式进行压力测试权限设置Apache配置文件详解ApacheRewrite规则讲解Apache配置文件权限操作总结Apache虚拟主机企业应用企业真实环境中,一台WEB服务器发布单个网站会非常浪费资源,所以一台WEB服务器上会发布多个网站,少则3-5个,多则2-30。在一台服务器上发布多哥网站,也称之为部署多个虚拟主机,WEB虚拟主机配置方法有三种:基于单个IP地址多个Socket端口基于

    2026年1月14日
    6
  • npm卸载安装

    npm卸载安装npm安装卸载命令利用npm安装xxx模块到当前命令行所在目录:npminstallxxx利用npm安装全局模块xxx:npminstall-gxxx安装但不写入package.json:npminstallxxx安装并写入package.json的”dependencies”中:npminstallxxx–save安装并写入package.json的”d…

    2025年7月27日
    12
  • django 聚合函数_聚合函数和非聚合函数

    django 聚合函数_聚合函数和非聚合函数前言orm模型中的聚合函数跟MySQL中的聚合函数作用是一致的,也有像Sum、Avg、Count、Max、Min,接下来我们逐个介绍聚合函数所有的聚合函数都是放在django.db.models

    2022年7月29日
    6
  • 2018——2019 20165239Exp9 Web安全基础

    2018——2019 20165239Exp9 Web安全基础

    2021年7月7日
    80

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号