指针和引用的优缺点?
指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。 二者的相同点: 1.都是地址的概念;指针指向一块内存,它的内容是所指内存的地址; 2.引用是某块内存的别名。 二者的不同点: 1.指针是一个实体,而引用仅是个别名; 2.引用使用时无需解引用(*),指针需要解引用; 3.引用只能在定义时被初始化一次,之后不可变;指针可变; 4.引用没有const,指针有const; 5.引用不能为空,指针可以为空; 6.“sizeof引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身(所指向的变量或对象的地址)的大小; 7.指针和引用的自增(++)运算意义不一样; 8.从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
延伸阅读
C++中引用与指针的区别?
1) 引用必须被初始化,指针不必。
2) 引用初始化以后不能被改变,指针可以改变所指的对象。
3) 不存在指向空值的引用,但是存在指向空值的指针。 C++中尽量用引用。个人觉得所有的引用都可以用指针,但指针比引用容易出错。 引用当然更直观更直接,做参数时,如果在函数内不刻意要用指针的那些副作用(如越界访问,动态定向什么的),引用可以代替指针。
Java中的“引用”和C++中的“指针”有什么区别?
1.类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。
2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。
3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,对程序来说还都是一个地址,但可能所指的地址不是程序想要的!
4.初始值:引用初始值为java关键字null。C++指针是INT,如不初始化指针,那他的值就不是固定的了。
5.计算:引用是不可以计算的。C++指针是INT,所以他可以计算,所以经常用指针来代替数组下标。
6.控制:引用不可以计算,所以他只能在自己程序里,可以被控制。C++指针是内存地址,也可以计算,所以他有可能指向了一个不归自己程序使用的内存地址,对于其他程序来说是很危险的,对自己程序来说也是不容易被控制的。
7.内存泄露:JAVA引用不会产生内存泄露。C++指针是容易产生内存泄露的,所以程序员要小心使用,及时回收。
8.作为参数:JAVA的方法参数只是传值,引用做为参数使用时候,回给函数内引用的值的COPY,所以在函数内交换两个引用参数是没意义的,因为函数只交换的参数的COPY值,但在函数内改变一个引用参数的属性是有意义的,因为引用参数的COPY所引用的对象是和引用参数是同一个对象。C++指针做为参数给函数使用,实际上就是他所指的地址在被函数操作,所以函数内用指针参数的操作都将直接作用到指针所指向的地址(变量,对象,函数,等等)。
9.操作符和声明:java里用”.”。C++指针用”->” 用”*”声明指针。(似乎这条没什么用!)
10.本质:java中的引用和C++中的指针本质上都是想通过一个叫做引用或者指针的东西,找到要操作的目标(变量 对象等),方便在程序里操作。所不同的是JAVA的办法更安全,方便些,但没有了C++的灵活,高效。 java中的引用和C++中的指针,他们最好不要混在一起,也不要认为是一回事,只不过他们的作用有些相似,总叫人不自觉的对比。但在我们写JAVA程序的时候最好忘记C++的指针,写C++程序的时候,也不要老惦记着JAVA的引用。只要记得引用无大小,安全,不可计算,强转时要小心就好了。参考
http://blog.csdn.net/b271737818/article/details/3931913
指针和引用的区别是什么?
引用可以看成特殊的指针,引用是C++引入的概念,C里没有。
其实引用是指针的封装类型,实际也是用指针机制实现。
引用可以看做固化的指针,只是外在调用形式为类型调用。
引用是C++为了更好的体现封装概念引入的新元素,本质上就是指针。
总结:引用就是指针换了件衣服。一体两面的东西。为语言增加新的概念元素,用来支撑C++的设计语义(例如拷贝构造的语法自然性等)。
引用与指针有什么区别?
引用,一个变量的别名,为什么引入别名呢?原因是我们想定义一个变量,他共享另一个变量的内存空间,使用别名无疑是一个好的选择。变量是什么?是一个内存空间的名字,如果我们给这个内存空间在起另外一个名字,那就是能够共享这个内存了,引用(别名)的由此而来。 指针,指向另一个内存空间的变量,我们可以通过它来索引另一个内存空间的内容,本身有自己的内存空间。 二者区别: 引用访问一个变量是直接访问,而指针是间接访问。 引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间。 引用在开始的时候就绑定到了一个内存空间(开始必须赋初值),所以他只能是这个 内存空间的名字,而不能改成其他的,当然可以改变这个内存空间的值. 例如 int i = 3,j = 4; int &x = i;//成为i的别名 x = j;//不能否认x仍然引用i,并没有成为j的别名,只是修改了x和j共享的内存空间的值. 这点与指针不同,指针在任何时刻都可以改变自己的指向
函数参数 指针 引用 优缺点?
当函数需要处理数组且函数体不依赖于数组的长度时应使用指针形参,其他情况下应使用引用形参:
2.指针形参的优点:可以明确地表示函数所操纵的是指向数据元素的指针,而不是数组本身,而且可以使用任意长度的实参数组来调用函数;