精华内容
下载资源
问答
  • 一般来说,为函数传入一个参数,如果希望函数执行完成后对参数的改动依然保留,... 传入指针则不然,传入指针后进行的修改,实际上是对指针指向的地址的内容进行修改,而不是对指针本身进行修改。比如说,指针的值是

             一般来说,为函数传入一个参数,如果希望函数执行完成后对参数的改动依然保留,那么有两种方式:

    ①  传入一个引用

    ②  传入一个指针

             传入引用的方式很好理解,就是相当于将变量本身传入,针对变量所进行的一切修改都是直接对变量本身的修改。

             传入指针则不然,传入指针后进行的修改,实际上是对指针指向的地址的内容进行修改,而不是对指针本身进行修改。比如说,指针的值是0x01cd3e2c,那么被修改的是0x01cd3e2c地址所代表的内容,指针的值0x01cd3e2c本身是不会被修改的。也就是说,传入指针,修改的是指向的内容,但指向的地址是不会变的。

             即便对指针的值进行了修改,函数结束后,会发现指针的值依然不变,这是由于传入的参数不是引用造成的。传入的参数不是引用,那么对该参数进行的任何修改都不会保留到函数结束后。

             比如:

    void Function(int*    pValue)
    {
    	pValue = newint[10];
    }
    
    void main()
    {
    	int*pValue = NULL;
    	Function(pValue);     //1
    }

             上面的1执行完成后,会发现pValue的值依然是NULL。但是在函数体内刚对pValue进行修改时,其值却是正确的。

             这是因为在函数体内,直接对pValue的值进行了修改,而非对pValue所指向的内存地址数据。pValue作为一个实参,传入后的一切修改都不会影响到自身的值,所以才会出现上述情况。

             因此,改为如下代码:

    void Function(int*& pValue)
    {
    	pValue = newint[10];
    }
    
    void main()
    {
    	int*pValue = NULL;
    	Function(pValue);     //2
    }

             这样,将Function的传入参数改为指针的引用,于是对指针自身值的一切修改就都会得到保存。2执行完成后,会发现pValue的值是正确的。

            

             指向指针的指针,也就是类似于void**。同理,void**作参数是相同的原因。        

             总之,如果要在函数内部修改指针自身的值,那么应该使用指针的引用或者指向指针的指针。

    展开全文
  • java引用指针

    千次阅读 2018-05-06 17:45:30
    我们知道,一个引用,比如说person p 等于new person,实际上就是p这个引用指向了这个对象实体,所以本质上就是指针。但是这个指针呢,它是安全的,受控制的,也就是说我们这个指针不能乱指,所以,这里面,比如说这...

    没有指针的java语言

           java语言中使用了引用代替了指针,引用实质就是指针,但它是受控的、安全的。我们知道,一个引用,比如说person p 等于new person,实际上就是p这个引用指向了这个对象实体,所以本质上就是指针。但是这个指针呢,它是安全的,受控制的,也就是说我们这个指针不能乱指,所以,这里面,比如说这个安全性包括了也就是它会检查这个指针是不是空的,是不是null,在这里面有没有指针运算,因为指针运算它很容易就把一个指针再加一点就指向别的地方了,很容易造成内存的错误访问,也不能访问没有引用到的内存,这样才使得那个自动垃圾回收成为可能,因为我们所有的这种引用,都是系统受控制的,都是能够管理的。

    C语言指针在java中的体现

        (1)传地址 -> 对象

            》引用类型,引用本身就相当于指针

                ~可以用来修改对象的属性,调用对象的方法(我们知道,对象本身是引用型)

            》基本类型:没有对应的

                ~如交换两个整数                                           ------C语言

                ~void swap(int x,int y){int t=x;x=y;y=t;}      ------C语言

                ~int a=8,b=9;swap(a,b);                              ------C语言

                ~一种变通的方法,传出一个有两个分量x,y的对象(构造一个class,这个class呢有x,y两个分量,那这样的话我们传一个引用过去,然后再把这个引用出来,我们就能得到这两个属性)              ------java

          (2)指针运算 -> 数组

                ~*(p+5) 则可以用 args[5]  


            (3)函数指针 -> 接口、Lambda表达式(接口本质上就是一个约定,那这里函数指针就是一个安全的约定,这个函数它叫什么名字?带什么参数?所以,它本质上是对那个函数指针的一个约定,而lambda函数是这种自动接口的更简洁写法,这个更简洁写法更能体现这个函数指针的概念)

                ~例:求积分,线程,回调函数,事件处理

             

               (4)指向结点的指针 -> 对象的引用

                 ~class Node{

                           Object data;

                           Node next;

                   }

                (5)使用JNI(Java Native Interface)

                    ~它允许java代码和其他语言写的代码进行交互

    展开全文
  • 指向指针引用

    2018-07-23 15:53:00
    1 int i=42; 2 int *p; ... //实际上r就是指针p,对r的操作实际上就是对p的操作,让指针p指向i 6 *r=100;//通过对r进行解引用,实际上修改的是p,对指针p进行解引用,修改的是p所指向的值i ...
    1 int i=42;
    2 int *p;
    3 int *&r=p;//指向指针p的引用,就是给指针p取别名r,前面的*号表示引用的是一个指针。
    4 
    5 r=&i;    //实际上r就是指针p,对r的操作实际上就是对p的操作,让指针p指向i
    6 *r=100;//通过对r进行解引用,实际上修改的是p,对指针p进行解引用,修改的是p所指向的值i

     

    转载于:https://www.cnblogs.com/Dark-King/p/9355082.html

    展开全文
  • Ciweek首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时...

    Java引用与C指针的区别

    2009-11-02

    eNet&Ciweek

    首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用

    Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的"GOTO"语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上每一个new 语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个"指针",更不用象在操作C++的指针那样胆战心惊。

    非也,基本类型数据存放在Stack中,存放的是数据。而产生对象时,只把对象的reference存放在stack中,用于指向某个对象,对象本身存放在Heap中。

    还有, 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。

    从实现上来讲,引用可以理解为一种受限的指针,引用底层可以采用指针来实现,也可以采用句柄的方式实现。早期jvm一般采用句柄的方式,现在的jvm,比如sun的,IBM的,一般就是用指针来实现。

    不过从语言的角度来将,没有必要把java的引用和C的指针来比较。

    指针是可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。

    引用不行,只能进行赋值运算。

    当然有区别

    A a=new A();

    你可以 a=a+1;吗? 指针就可以

    c3e667f7e5ce5e17d471e602488fef4e.png

    您对本文或本站有任何意见,请在下方提交,谢谢!

    展开全文
  • 引用 指针?

    2018-01-09 17:32:29
    全部都是值传递, 自然, 在使用对象时实际上都是使用的引用  Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序变得非常复杂难以理解,滥用指针写成的代码...
  • 指针引用

    2018-02-02 21:17:31
    1、引用 引用必须初始化 引用就是给对象取一个别名。定义引用,程序把引用和它的初始值...获取引用值,实际上就是获取了与引用绑定对象的值。 引用必须指向某个固定对象,之后不可修改 首先引用并不是对象,所以不
  • 引用是特殊指针

    千次阅读 2012-09-21 15:09:03
    实际上引用就是一个指针,只不过是个特殊的指针,编译器对它做了些特殊的处理.它也占用内存.但由于编译器做了特殊处理,你不能用&去取址,用sizeof得到的值也不会是4或者8,而是它引用的对象的size大小. 其实我们想想也...
  • 在android 中可以广泛看到的template<typename> class Sp 句柄类实际上是android 为实现垃圾回收机制的...智能指针有很多实现方式,android 中的sp 句柄类实际上就是google 实现的一种强引用的智能指针。我没有仔细看
  • 指针引用的区别

    2018-03-09 15:52:47
    引用赋值,实际上是把值赋给引用绑定的对象。 获取引用的值,实际上是获取了引用绑定对象的值。因此,引用作为参数,传进来的是原始的对象而不是其拷贝。 引用本身不是对象 指针 指针本身就是一个对象,允许...
  • 指针作为函数的参数进行传递时,实际上本质上是安置传递,即将指针进行了一份拷贝,在函数的内部对这个指针的修改实际上就是对一个在函数内部的那个局部变量的修改。这点事和引用不同的,引用实际上是在参数传递时...
  • 引用传递与指针传递

    2016-08-28 17:37:00
    传递效果二者相同,对形参的操作实际上就是对主调函数中的实参变量或对象进行操作 引用传递不需要额外分配内存空间,直接对实参进行操作 指针传递需要分配存储单元,并使用“*指针变量名”的形式进行运算 转载于...
  • 指针引用的比较

    2018-04-03 16:12:47
    实际上引用即具有指针的高效率,又具有变量的直观性,很适合各种环境中的使用。我今天就把引用指针的相同不同之处总结起来,希望会对大家有所帮助 目录1.什么是指针2.什么是引用3.引用指针的本质区别4.使用...
  • 底层实现上:引用就是指针引用实际上是有空间-----------地址(无区别) 1.引用在定义时必须初始化,指针没有要求。 2.引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同...
  • 这里b就是a的一个引用,我们对a或b的修改都会影响对方,因为两者实际上是一个对象,只不过有不同的名字 引用的类型需要和与之绑定的对象严格匹配,除了以下两种情况 const的引用 double a = 3.14; const int ...
  • 引用在逻辑上相当于变量的别名,在内存中实际上相当于指向不能改变但所指之物的内容可以改变的一个指针。例如 int &p=a;就相当于 int *const p=&a;  3.指针可以是多级指针,但引用不能是多级引用,也就是说没有引
  • 引用指针的区别 1 指针 指针就是地址 ...引用在底层实现上,实际上是有空间的,它在底层是按照指针的方式来实现的 int main(){ int a = 10;; int &ra = a;//给变量a取别名 cout &...
  • C++指针引用小结

    2020-09-20 09:58:31
    C++C++C++的指针引用指针...a ,q应该是a的地址,但是实际上存储地址的是变量q, 而q是索引地址所代表的值的。明白这一点,指针就应该没大问题了。 int a = 10; int * q = &a; // 打印q 与*q cout << q
  • 在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。 指针引用的不同点: 引用在定义时必须初始化,指针没有要求 引用在初始化时引用一个实体后,就不能再引用其他体,而指针可以在任何时候指向任何一...
  • 切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型)。...数组实际上是切片...
  • 首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用。 Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也...
  • 在底层实现上实际是有空间的,因为引用是按照指针方式来实现的 引用在定义时必须初始化,指针没有要求 int *ptr;可以 int&amp;a;不可以 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以...
  • Java的引用实际上指针,本质上和C/C++的指针是一样的东西,只是在使用方法上有不一样的限制,所以起了一个不一样的名字,防止和指针混淆。 当明白了这个个时候,再回头看Object类equal函数清晰明了,看 System....
  • 指针引用和句柄

    2014-10-16 22:23:22
    (3)句柄是指针指针,句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样。Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,...
  • 指针引用参数区别

    2010-12-08 00:18:05
    1.两者都可以不用复制变元而提高效率,但是指针的传递实际上是复制了指针的,而引用没有复制。 2.虽然两者都可以改变变元的值。但是如果函数参数是指针就是明显暗示传入的值可能被改变,而传引用没有这个暗示。...
  • C++指针引用的区分

    2018-05-05 16:58:46
    需要注意的是:引用实际上是指向的对象的一个别名,声明过后绑定了这个对象,对引用的操作实际上就是对指向的对象的操作。#include "stdafx.h" #include &lt;iostream&gt; us...
  • 因此,如果你要修改指针的指向时,必须把指针的指向变成一种值的形态,就是指向指针指针的作用,通过指向指针指针,你可以在函数中修改形参中指针的指向,因为这时候指针的地址,实际上是以另一个指针的值来体现...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 752
精华内容 300
热门标签
关键字:

引用实际上就是指针