指针传递 引用传递 值传递

原创 2016年08月30日 14:16:53

用指针变量可以表示各种数据结构,能很方便地使用数组,字符串和链表。并不是直接操作数据,而且它可以直接和内存打交道,使用稍有不慎,就会造成程序崩溃。

使用指针的好处:

1) 在数据传输时,如果数据块较大,这时就可以使用指针传递地址而不是实际数据。提高传输速度,又节省大量内存。

2)在数据结构中,链表、树、图等大量的应用都指针。

3)可以动态分配内存。


野指针:指向不可用内存的指针。任何指针变量在创建时,不会自动成为NULL空指针,其默认值是随机的。所以指针在创建的同时应当初始化,或者将指针置为NULL,或者指向合法的内存,而不应该置之不理,否则就会成为野指针。而同时由于指针被释放(free/delete)后,未能将其配置为NULL,也会导致该指针变为野指针。虽然free/delete把指针指向的内存给释放掉了,但是指针本身没有释放掉。第三种是指针操作超出了变量的作用范围。

空指针:表示指针处于闲置状态,没有指向有意义的内容。


1)引用是某块内存的别名,指针指向一块内存,它的内容是所指内存的地指针是个实体,而引用仅是个别名。

2)引用之后只能在定义时初始化一次,之后不能被改变。指针却是可变的。

3)引用不可以为空,指针可以为空。引用使用时不需要解引用(*),而指针需要解引用。

4)sizeof引用得到的是所指向的变量的大小,而sizeof指针 得到的是指针本身的大小。

5)指针和引用的自增(++)运算意义不一样。


对于指针而言,只能进行==或!=运算。



不能建立引用数组。

不能建立指向引用的指针。可以建立指针变量的引用。

不能建立引用的引用。


值传递:形参是实参的拷贝,改变形参的值不会影响外部实参的值。从被调用的角度来讲,值传递是单向的,参数的值只能传入,不能传出。


指针传递:本质上讲是值传递,它传递的是一个地址。形参为实参的地址,当对形参的指向操作时,就相当于对实参本身的操作。


引用传递:形参是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递的过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是主调函数存放进来的实参变量的地址。被掉函数对形参的任何操作都被处理成间接地址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参的任何操作都影响了主调函数中实参变量。实参地址传递到形参,使形参的地址取实参的地址,从而使形参和实参共享同一单元的形式。


指针/引用 传递的另外一种用法是:当一个函数实际需要返回多个值时,而只能显示返回一个值时,可以将另外需要返回的变量以指针/引用传递给函数,这样在函数内部修改并且返回后,调用者可以拿到被修改过后的变量,也相当于一个隐式的返回值传递吧。


















C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递

1.普通传递 void f( int p){ printf("\n%x",&p); printf("\n%x",p); p=0xff; } void main() { int a=0x10...
  • whzhaochao
  • whzhaochao
  • 2013年10月20日 21:57
  • 12756

C语言值传递 地址传递 引用传递

C语言值传递 地址传递 引用传递: 1.值传递 eg: void Exchg1(int x, int y) { int tmp; tmp = x; x = y; ...
  • TKDwave520
  • TKDwave520
  • 2013年09月15日 10:47
  • 8458

值传递、指针传递和引用传递

C++函数参数和返回值三种传递方式:值传递、指针传递和引用传递 (着重理解)引用与指针的比较引用是 C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n 是m 的一个引用(reference...
  • xiaocai0807
  • xiaocai0807
  • 2011年06月05日 10:08
  • 670

C++中引用传递与指针传递区别

C++中引用传递与指针传递区别
  • gdut2015go
  • gdut2015go
  • 2015年10月13日 10:18
  • 2035

C++中值传递、指针传递和引用传递的比较

 C++引用与指针的比较 引用是C++中的概念,初学者容易把引用和指针混淆一起。 一下程序中,n是m的一个引用(reference),m是被引用物(referent)。 int m; int &n =...
  • wanjichun
  • wanjichun
  • 2008年11月12日 09:48
  • 15915

向函数中传递指针和传递指针引用的区别

如果是传递指针,那么会先复制该指针,在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址,如果在函数内部将复制后的指针指向了另外的新的对象,那么不会影响原有的指针; 但 是对于传递指针应...
  • u011447369
  • u011447369
  • 2015年10月27日 14:41
  • 1420

值传递、指针传递、引用传递

原文地址:http://www.cnblogs.com/Romi/archive/2012/08/09/2630014.html 昨天看了内存管理的有关内容,有一点了解,但不是很深入,发现之前写代码...
  • a2112233445566
  • a2112233445566
  • 2015年04月15日 10:02
  • 667

C++入门篇之值传递,指针传递和引用传递的那些事

最近在自学C++,一边学习一边在心里将C++与C语言和Java进行比较。毫无疑问,作为以C语言为基础,和C语言同一个爹的一门编程语言,C++自然与C原因有很多相似之处,例如C++的变量传递就沿用了C语...
  • Ivan_zgj
  • Ivan_zgj
  • 2016年02月26日 13:49
  • 526

C/C++值传递、指针传递和引用传递详解

一、实例 //下面5个函数哪个能成功进行两个数的交换?#include using namespace std; void swap1(int p, int q) { i...
  • u014186096
  • u014186096
  • 2015年09月28日 16:50
  • 824

值传递,指针传递 ,引用传递的总结

C++中值传递、指针传递、引用传递的总结 收藏  1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传...
  • sjpz0124
  • sjpz0124
  • 2015年07月24日 10:08
  • 874
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针传递 引用传递 值传递
举报原因:
原因补充:

(最多只允许输入30个字)