引用

PHP变量、引用、函数传参之彻底掌握,从此节操是路人

China☆狼群 提交于 2020-03-24 02:20:16
3 月,跳不动了?>>> 今天绝对是兴奋的一天,不仅仅是周五这个特殊的日子(周六日可以休息啦),也不是弄清了某wordpress插件的功能流程,更不是再次买到了想吃很久的手撕牛肉,而是真正解决了一直以来(嘿嘿,其实时间不长)对PHP中变量引用和函数传参的疑惑。 故事源于一个巧合,我在查PHP变量作用域的东西时看到的文章(后面再附上地址,无意侵权作者大大)。因为这篇只讲变量和函数传参的,所以其他的不涉及了(也无力涉及哈哈)。 看这么一句 $a = 'abc'; 当我们定义一个变量时,PHP会为我们做两件事情 申请一个zval结构体,那什么是zval呢 struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount; zend_uchar type; /* active type */ zend_uchar is_ref; }; 这个就是zval的C语言定义,在PHP中变量都是用这个结构体来存储,其中成员zvalue_value是一个联合体,用以存储底层强类型变量,这种结构也是实现PHP弱类型的关键,在这里只需要清楚有这么个结构体就可以了。 zval结构体存实际内容(最最里面其实是那个union体),令变量名符号a指向这个zval

VS2010不能添加System.Data.OracleClient引用

吃可爱长大的小学妹 提交于 2020-03-01 16:24:56
vs2010里 默认是无法使用oracle的,可以使用以下 解决方法 : 1)右击项目的属性,在弹出窗口中有一个“目标框架”下拉框选项,默认会是.NET FRAMWORK 4 CLIENT PROFILE,当选项是这个的时候,如果添加引用OracleClient这个dll的话是找不到的,将此选项更改为.NET FRAMWORK 4。 2)右击bin文件夹,选择“添加引用”,在弹出的选择框中选择.net选项卡,选择System.Data.OracleClient.dll,点击OK,这样就可以在.cs页面中添加引用了:using System.Data.Oracle; 3)System.Data.OracleClient.dll 保存路径如下,可以通过浏览卡添加引用: C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Data.OracleClient.dll OracleClient 方式,是微软专门针对Oracle数据库开发的,仅在 .NET Framework 1.1 版中受支持。据说速度快、性能好,是推荐使用的方式。但根据我的经验,当Oracle数据库服务器端采用英文字符集比如 US7ASCII 时,客户端不管字符集如何设置,读出的中文都是乱码

java引用-强软弱虚-避免OOM

心已入冬 提交于 2019-12-22 19:47:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Java 如何有效地避免OOM:善于利用软引用和弱引用   想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们就来说一下如何利用软引用和弱引用来有效地解决程序中出现的OOM问题。下面是本文的目录大纲:   一.了解 强引用、软引用、弱引用、虚引用的概念   二.进一步理解软引用和弱引用   三.如何利用软引用和弱引用解决OOM问题   如果有不正之处,希望谅解和批评指正,不胜感激。   请尊重作者劳动成果,转载请标明原文链接:    http://www.cnblogs.com/dolphin0520/p/3784171.html 一.了解 强引用、软引用、弱引用、虚引用的概念   在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。   从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。下面来阐述一下这四种类型引用的概念:   1

java十分钟速懂知识点——引用

蹲街弑〆低调 提交于 2019-12-06 00:46:05
一、由健忘症引起的问题 今天闲来没事在日志中瞟见了个OutOfMemoryError错误,不由得想到前一段时间看到一篇面经里问到Java中是否有内存泄露,这个很久以前是留意过的,大体记得内存溢出和内存泄露是不同的,至于各自都有哪些情况,那个...额....忘了...。好吧,记忆力一向不好,忘就忘了,那就再总结一遍吧。翻了下收藏的博客,回顾了下便是想起了了~.~。看起来一切很美好,但是其中的一个例子突然使我困惑了: public class TestDemo { static Test[] tests = new Test[3]; public static void main(String[] args) { Test t = new Test("test1"); tests[0] = t; //将t置为null,看起来似乎我们已经释放创建的对象,当下次gc时其将被回收 t = null; //那么我们打印下test[0]看看 System.out.println(tests[0]); } } 这是个示例内存泄露的例子,该例子十分典型,几乎所有内存泄露的示例都与此类似,作为javaer往往觉得理所应当。然而作为一个学习C++入行(学的很烂),并一直把引用当指针看的javaer不免觉得有些疑惑: t是对象的引用,这里可以看做指向对象的指针,那么 test[0]=t

Java中的引用和C++中引用的区别

眉间皱痕 提交于 2019-12-04 03:35:35
用过java和C++的同学都知道在二者中均有引用的概念。但是这两个概念所代表的并不相同。 首先了解C++ 中引用的含义:“引用”即“别名”。C++中的引用代表的就是实际的存储空间。对其进行操作就是对存储空间进行操作。 而在Java中的引用:可以看做是C语言中的“指针”或者“地址”。对java中引用的属性(即指针指向的存储空间)进行操作才是有效的。 参考 http://blog.csdn.net/wzy_1988/article/details/16886337 : “ java内存分配中的栈 在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配 当在一段代码块定义一个变量时,java就在栈中为这个变量分配内存空间,当该变量退出该作用域后,java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用 java内存分配的堆 堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理 在堆中产生了一个对象或数组后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相等于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称 引用变量是普通的变量

Python动态类型的学习---引用的理解

倖福魔咒の 提交于 2019-12-03 04:55:21
一,Python浅拷贝和深拷贝 浅拷贝 是指拷贝的只是原对象元素的引用,换句话说,浅拷贝产生的对象本身是新的,但是它的内容不是新的,只是对原对象的一个引用。这里有个例子 >>> aList=[[1, 2], 3, 4] >>> bList = aList[:] #利用切片完成一次浅拷贝 >>> id(aList) 3084416588L >>> id(bList) 3084418156L >>> aList[0][0] = 5 >>> aList [[5, 2], 3, 4] >>> bList [[5, 2], 3, 4] 可以看到,浅拷贝生产了一个新的对象bList,但是aList的内容确实对aList的引用,所以但改变aList中值的时候,bList的值也跟着变化了。 但是有点需要特别提醒的,如果对象本身是不可变的,那么浅拷贝时也会产生两个值,见这个例子: >>> aList = [1, 2] >>> bList = aList[:] >>> bList [1, 2] >>> aList [1, 2] >>> aList[1]=111 >>> aList [1, 111] >>> bList [1, 2] 为什么bList的第二个元素没有变成111呢?因为数字在python中是不可变类型!! 这个顺便回顾下Python标准类型的分类: 可变类型: 列表,字典 不可变类型:数字

浅析:Java与C++的主要区别

可紊 提交于 2019-12-03 02:12:15
Java 区别于 C++ 表面看来两者最大的不同在于 Java 没有指针,或者说, Java 满地都是指针。对于编程者而言 Java 的这种设计是安全且更易用的。说 Java 满地是指针的原因在于它把指针的功能隐藏了,其实在程序的深处,指针仍以存储地址的形式存在着。由于程序员无法获知真实地址,实际上提供了一个更加安全的系统,避免意外破坏。 1. 引用 对于简单数据类型, Java 将和 C++ 同样采取直接存储的方式。如 int a=1; 一个名为 a 的存储地址将存储整型指 1 。 对于对象,如 Object o; 一个名为 o 的存储地址将存储的是一个 Object 类型的地址的引用而非对象本身,对象本身被存储在别处。 在 C++ 中 Object o; 这句话将创建一个对象,且留出了存储这个对象所需的空间。在 C++ 中也存在引用,但是需要显式说明,用 & 符号。 2. 赋值 O1=O2; 在 C++ 中将一个名为 O2 的对象的数据复制给 O1, 即存在两个对象,他们的值相同。 而在 Java 中,这句话只是把 O2 对象的引用复制给了 O1 ,此时它们指向同一个对象,即只存在一个对象。 4. 垃圾回收机制 在 C++ 中,对于不再需要的空间,需要用 delete 来释放,估计大家几乎都经历过忘记或者错误删除存储空间的经历吧,后果是内存泄露,系统资源被消耗,程序不稳定

关于vs中项目之间无法引用的问题

时间秒杀一切 提交于 2019-12-02 00:34:17
今天工作发现,当我在当前我负责的项目中引入他人的项目,然后调用别人项目里面的对象时,发现无法找到。看来一下项目的引用是正常的,但是敲代码,始终无法正确着当对象。 原因如下: 两个项目的框架不一样,需要调整一样的。如下图: 如果说被引用的项目框架版本低一点还好,可以引用到。如果低版本引用高版本,就会导致引用不到的情况。 来源: oschina 链接: https://my.oschina.net/u/1455020/blog/649531