首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏二猫の家

    指针(*)、取地址(&)、引用(*)与引用(&)

    指针(*)、取地址(&)、引用(*)与引用(&) C++ 提供了两种指针运算符,一种是取地址运算符 &,一种是间接寻址运算符 *。 引用与指针赋值 例程 int main(){ int num = 7; int* p = # printf("数值%d所在的地址是 %p\n", num, p); printf 指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为7 指针p所指向的地址为 0x7ffeefbff3b8 , 该地址上所保存的值为100 123 注意这里*操作符为引用操作符 (上面num的值变为100) 当然,我们也可以给指针p赋值,使其指向另外一个地址(这样就改变了在引用时获取的左值): int main(void) { int num = 7, another refval);//999 return 0; } 输出 -12 -12 999 999 12 总结 *操作符: 定义一个指针 int* p; 1 将一个指针(地址)引用得到改地址所存的值

    1.4K20编辑于 2022-11-30
  • 来自专栏johnhuster

    java基础之引用引用

    一个很基础的问题,但也很可能被忽略,那就是java的引用(reference)与引用(dereference)区别及联系 C++与java一个很大的不同就是C++支持指针操作,java没有指针的概念, 取而代之的是引用(reference),我们也知道操作java对象实际上使用的是java对象的引用,局部引用对象是放在栈上的,而引用指向的对象则是放在堆上的。 dereference的核心含义,还是根据reference来access(resource或者value),通常可以认为就是根据引用来存取资源或存取值。

    89320编辑于 2022-03-29
  • 来自专栏python-爬虫

    GO-&获取地址与*引用

    func main(){ b :=[]int{1,2,3} test(b) fmt.Println(b) } func test(a []int){ a[1]=3 } //如果传入对象是值类型,不是引用类型这个不生效 ,只正对引用类型切片才生效,数组值类型不生效,只能按照方式一写

    2.9K20发布于 2020-06-19
  • 来自专栏C/C++基础

    C++引用运算符*重载

    “*”是一个一元操作符,它作用于指针,获取指针所指单元的内容。当某个类中对*操作符重载时,是将该类对象当做一个指针看待,而用*操作符提取指针所指向的内容。考察如下程序。

    1.7K40发布于 2018-08-03
  • 来自专栏Rust语言学习交流

    `Deref coercion`(自动引用类型转换)精制总结

    Deref coercion(自动引用类型转换)精制总结 语法功能: 实现【引用】操作符*在自定义【智能指针】上的行为。从而,使【智能指针】如同【普通引用】一样使用。 实质能力: 将A类型的实例转换成B类型实例的引用,只要A与B类型之间满足A: Deref<Target = B>或A: DerefMut<Target = B>。 &B执行引用操作*,得到B实例 在A类型实例上用.操作符调用B类型实例上的成员方法。 函数调用 [例程1] 需要注意的只有一点:函数的实参必须是【智能指针】的【引用】(而不是【智能指针】自身)才可触发Deref coercion。 成员方法调用 [例程2] 引用操作。 若A与B都满足Deref / DerefMut trait限定条件,那么A -> &B的【引用-类型转换】将被递归地连续执行,直至如下三个条件之一被达成,而结束递归: 执行时间点 编译时,而不是运行时

    79620编辑于 2022-04-18
  • 来自专栏AIGC

    【C语言】指针详解:概念、类型与引用

    引用(*):用来访问指针所指向的内存地址的内容。 指针引用与内存访问 指针的引用操作允许程序直接访问内存。通过引用,我们可以获取指针指向地址上的数据,这使得指针在C语言中的使用非常灵活。 1. 指针引用的影响 当我们引用指针时,C语言会根据指针的类型来决定如何解析内存。具体来说,指针类型决定了解引用时的“步长”,即它访问内存的单位大小。 char*指针 printf("*pi = %d", *pi); // 引用int*指针 *pc:按char类型引用,它访问内存中的1个字节。 *pi:按int类型引用,它访问内存中的4个字节(32位系统上)。 2. 不同类型指针的引用结果 不同类型的指针在引用时,会影响内存的访问方式。

    80110编辑于 2025-02-05
  • 来自专栏编程珠玑

    引用NULL为什么会导致程序挂死?

    来源:公众号【编程珠玑】 作者:守望先生 ID:shouwangxiansheng 引用NULL指针为什么会出错,导致程序挂死?或者说访问内存地址为0的位置为什么会视为非法? 引用NULL 解释问题之前,先描述问题。 总结 不该读的地方别读,不该写的地方不要写,引用记得做空检查。 今日推荐《我要吹爆这本书!》 关注公众号【编程珠玑】,获取更多Linux/C/C++/数据结构与算法/计算机基础/工具等原创技术文章。

    1.4K20发布于 2020-01-14
  • 来自专栏C++核心准则原文翻译

    C++核心准则ES.65:不要引用无效指针

    ES.65: Don't dereference an invalid pointer ES.65:不要引用无效指针 Reason(原因) Dereferencing an invalid pointer 引用例如null等无效指针,是无定义的行为,通常会立即导致程序崩溃,错误的结果,或者内存破坏。 为了解决这个问题,要么扩展对象指针意图指向的对象的生命周期,要么缩短指针的生命周期(将引用操作移到所指向对象的生命周期结束之前。) Flag a dereference of a pointer that may have been invalidated by a delete 如果由于指针指向的对象被销毁而无效时,标记它的引用操作 ,标记它的引用操作。

    1.2K20发布于 2020-05-29
  • 来自专栏Seebug漏洞平台

    CVE-2019-0808 从空指针引用到权限提升

    其次空指针引用的漏洞如何利用?这些可以通过查阅相关资料来自行探索。 从poc到寻找漏洞成因 在我分析这个漏洞的时候已经有人公布了完整的利用链,包括该漏洞的 poc 、 exp 和浏览器利用的组合拳。 然后在函数MNGetpItem中导致了空指针引用得问题。 ? 从空指针引用到任意代码执行 触发了漏洞之后我们如何利用是个问题,首先的问题是把空指针引用异常解决掉,在 windows7 版本上可以使用 ntdll! 那我们通过这个漏洞的复现及利用过程,还要思考这个漏洞是如何被发现的,是否可以通过poc中的一些功能来 fuzz 到同样的空指针引用,以及我们如何去寻找这类漏洞。

    1.2K20发布于 2020-10-10
  • 来自专栏c++

    【c++】类和对象(上)this指针、空指针引用易错点

    编译报错 B.运行崩溃 C.正常运行 1.不做改变的时候: 正常运行 2.仅将 1部分取消注释: 运行崩溃 3.仅将 2部分取消注释: 正常运行 这里涉及到的就是空指针的引用问题 对于1 和 3 : 成员函数不在类对象里面,将p这个空指针传了过去,看上去是访问了空指针,但是底层编译器并没有对其引用,而是去公共代码区找。 对于2: 成员变量就在类对象里面,相当于是引用空指针,会运行崩溃。 七、封装 面对对象有三大特性:封装、继承、多态。接下来我们可以初步了解一下封装。

    8110编辑于 2026-01-14
  • 来自专栏程序人生丶

    C++ 引用与函数基础:内存地址、调用方法及声明

    C++ 引用获取内存地址和值在上一页的示例中,我们使用了指针变量来获取变量的内存地址(与引用运算符 & 一起使用)。 // 引用:使用指针输出 food 的内存地址(0x6dfed4)cout << ptr << "\n";// 引用:使用指针输出 food 的值(Pizza)cout << *ptr << "\n" 在非声明中使用时,它作为引用运算符。修改指针值你可以改变指针的值。 Hamburger";// 输出指针的新值(Hamburger)cout << *ptr << "\n";// 输出 food 变量的新值(Hamburger)cout << food << "\n";引用指针的注意事项引用指针时 不要引用空指针,这会导致程序崩溃。修改指针的值可能会导致意外的结果,应谨慎操作。总结引用是 C++ 中一个重要的概念,它允许你获取指针指向的变量的值或内存地址。

    60900编辑于 2024-04-12
  • 来自专栏每天学Java

    Java引用类型:强引用,软引用,弱引用,虚引用

    在Java中提供了4个级别的引用:强引用,软引用,弱引用,虚引用。在这4个引用级别中,只有强引用FinalReference类是包内可见,其他3中引用类型均为public,可以在应用程序中直接使用。 强引用 Java中的引用,有点像C++的指针,通过引用,可以对堆中的对象进行操作。 强引用具备一下特点: 强引用可以直接访问目标对象 强引用所指向的对象在任何时候不会被系统回收,JVM宁愿抛出OOM异常,也不回收强引用所指向的对象 强引用可能导致内存泄漏 所以当我们在使用强引用创建对象时 软引用引用是除强引用外,最强的引用类型。 弱引用引用时一种比软引用较弱的引用类型。

    2.8K31发布于 2020-06-02
  • 来自专栏鳄鱼儿的技术分享

    引用,软引用,弱引用,虚引用

    引用,软引用,弱引用,虚引用 ⽆论是通过引⽤计数法判断对象引⽤数量,还是通过可达性分析法判断对象的引⽤链是否可达,判定对象的存活都与“引⽤”有关。 软引用可用来实现内存敏感的高速缓存。 软引⽤可以和⼀个引⽤队列(ReferenceQueue)联合使⽤,如果软引⽤所引⽤的对象被垃圾回收,JAVA虚拟机就会把这个软引用加入到与之关联的引⽤队列中。 弱引用(WeakReference) 如果⼀个对象只具有弱引⽤,那就类似于可有可无的⽣活⽤品。 弱引⽤与软引⽤的区别在于: 只具有弱引⽤的对象拥有更短暂的⽣命周期。 虚引用(PhantomReference) "虚引⽤"顾名思义,就是形同虚设,与其他几种引⽤都不同,虚引⽤并不会决定对象的生命周期。 虚引用主要用来跟踪对象被垃圾回收的活动。 虚引⽤与软引⽤和弱引⽤的⼀个区别在于: 虚引⽤必须和引⽤队列(ReferenceQueue)联合使用。

    74610编辑于 2024-05-21
  • 来自专栏Java技术

    引用引用引用引用

    新生代是强引用数据实列。程序员构建新生代对象。对象内存堆中存放数据引用对象的堆内存。堆内存随机分配。堆表寻址堆内存中的引用对象内存块。内存的分配和托管独立硬件平台。 标记清除老年代对象引用。分代收集新生代老年代永久代的内存碎片。复制算法fromSpace指向不同的代收集内存不引用碎片。Eden区域内存特殊分配回收的区域。 老年代弱引用数据实例。虚引用永久代的对象引用。软引用待对象堆内存的收集区域。Java虚拟机逻辑代码的编译方式。Java编译器独立开发。 内存块与块相互独立耦分布互不影响。内存堆表存在与否相关内存寻址快慢。索引内存地址树存储内存索引地址。不同程序设计语言的开发和释放内存区域的方式不一致。C 语言程序设计开发程序设计的新纪元。

    54210编辑于 2025-04-07
  • 来自专栏BAT的乌托邦

    【小家java】引用类型(强引用、软引用、弱引用、虚引用

    1、概述 本文不论述java中值传递和引用传递之间的问题(有需求的可移步理解java中值传递和引用传递),而重点讨论Java中提供了4个级别的引用:强应用、软引用、弱引用和虚引用。 (JVM宁愿抛出OOM异常也不回收强引用所指向的对)被引用的对象。 软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。 方法 } } 从上可以看出,咱们就可以监听回收,然后doSomething了 弱引用(WeakReference):弱引用和软引用很像,当gc时,无论内存是否充足,都会回收被弱引用关联的对象。 如果弱引用引用的对象被JVM回收,这个弱引用就会被加入到与之关联的引用队列中 虚引用(关注使用场景) 虚引用(PhantomReference):虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期

    2.6K40发布于 2019-09-03
  • 来自专栏小刀志

    通过对比 5 月补丁分析 win32k 空指针引用漏洞

    这篇文章将通过补丁对比的方式,发现并分析补丁程序中修复的一个由某处空指针引用导致的提权漏洞,最终实现其验证和利用代码。 0x0 前言 这篇文章通过补丁对比的方式发现并分析 5 月补丁修复的一个在 win32k 内核模块中存在的空指针引用导致的内核提权漏洞。 因此有充分理由相信,这两处修补很可能修复了旧版本存在的空指针引用的问题。 0x2 细节 根据前面的补丁对比可知,漏洞发生在函数 SetImeInfoEx 中。 在 win32k.sys 模块中仅系统服务函数 NtUserSetImeInfoEx 存在对函数 SetImeInfoEx 的引用。 接下来对 System 进程的目标 Token 对象指针引用计数进行自增,就大功告成了。当发送消息的函数返回到用户进程之后,创建新的命令提示符进程。

    86430编辑于 2022-12-12
  • 来自专栏java、Spring、技术分享

    Java中弱引用、软引用、虚引用、强引用、 Finalizer引用

    在Java层面,一共有四种引用:强引用、软引用、弱引用、虚引用,这几种引用的生命周期由强到弱。转换关系大致如下图所示: ? 强引用(Strong Reference)   就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。 对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了。 引用何时被加到ReferenceQueue队列里   在构造软引用,弱引用和幻象引用的时候,可以传入一个ReferenceQueue的对象,这个队列是用来做什么的呢? 当软引用,弱引用和幻象引用引用的对象被回收之后,对应的SoftReference,WeakReference,PhantomReference 对象已经不再具有存在的价值,需要一个适当的清除机制,避免大量

    2.7K30发布于 2018-12-24
  • 来自专栏技术趋势

    什么是强引用、软引用、弱引用、虚引用

    什么是强引用、软引用、弱引用、虚引用? 强引用(StrongReference):一般指的是对像被new出来,强引用一般不会被jvm收回,但会报OutOfMemory(内存不足)。 Object obj = new Object(); 软引用(SoftReference):软引用相对来说弱于强引用,当内存足够的时候不会被GC回收,但内存不足时,再试图回收软引用,通过软引用可以做临时缓存 (PhantomReference):这个引用也有人叫幻引用,也很明显,引用一个不存在,随时会被干掉,算是所有引用中最容易被干掉的。 引用类型 GC策略 简介 强引用(StrongReference) 永远不会回收(GC ROOT可引用到的前提下) 最基本的引用Object obj=new Object() 软引用(SoftReference 4种引用强度从高到低:强引用 -> 软引用 -> 弱引用 -> 虚引用 最后 不管哪种引用,在开发过程中,都是尽量减少强引用,毕竟内存有限,虽然说放到内存可以提升用户访问效率,但是这也是一把双刃剑,

    2K10发布于 2020-11-24
  • 来自专栏编程一生

    Java的强引用、软引用、弱引用、虚引用

    它底层实现和API接口上使用了强引用、软引用、弱引用。所以温故知新下,也夯实下基础。 弱引用引用是发生了一次垃圾回收后,既存的弱引用对象就开始回收。通常,一个弱引用对象仅能生存到下一次垃圾回收前。 用实验说明一下,为了防止JVM自动调整堆大小,我们把堆设置-Xmx200M。 下一次GC,这中间产生的软引用对象也都被回收了。 ? 最终,由于GC及时,整个过程没有爆发OOM,平安的结束了。 ? 虚引用引用也叫幻影引用。任何时候可能被GC回收,就像没有引用一样。 并且他必须和引用队列一起使用,用于跟踪垃圾回收过程,当垃圾回收器回收一个持有虚引用的对象时,在回收对象后,将这个虚引用对象加入到引用队列中,用来通知应用程序垃圾的回收情况。 总结 Java的强软弱虚引用被回收的时机不同:强引用引用被释放才会回收;软引用是没释放,但是快OOM了就会被回收;弱引用引用没释放,但是发生了GC后就会被回收;虚引用随时会回收,好像没有存在过,但是会有一个队列来跟踪它的垃圾回收情况

    2.7K31发布于 2020-11-24
  • 来自专栏爱撸猫的杰

    Java 的强引用、弱引用、软引用、虚引用

    1、强引用(StrongReference)         强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。 软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。 3、弱引用(WeakReference)       弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。 虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。 5、总结     Java4种引用的级别由高到低依次为: 强引用  >  软引用  >  弱引用  >  虚引用     通过图来看一下他们之间在垃圾回收时的区别: ?        

    4.6K30发布于 2019-03-28
领券