指针传递 引用传递 值传递

原创 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++的值传递,指针传值和引用传值的区别

首先让我们来看下面几个代码:
  • zhushh
  • zhushh
  • 2014年11月03日 12:07
  • 1492

值传递,指针传值以及引用传值的区别

将对象作为参数传递给函数有三种情况,分 别为: fun1(ABC p) {……}/ / 值 方 式 fun2(ABC *p) {……}//指针方式 fun3(ABC &p){……}//引用方式...

函数参数传递、值传递、指针传递(地址传递)、引用传递

下面5个函数哪个能够成功进行两个数的交换?#include using namespace std;void swap1(int p, int q) { int temp; temp...

c++值传递 指针传递 引用传递详解(转载)

最近写了几篇深层次讨论数组和指针的文章,其中提到了“C语言中,所有非数组的形式参数传递均以值传递形式” 数组和指针背后——内存角度 语义"陷阱"---数组和指针 而关于值传递,指针传...

彻底搞定C指针-——第五篇:函数参数的传递(值传递、地址传递、引用传递)

彻底搞定C指针-——第五篇:函数参数的传递文章结构:||———— 一、三道考题|                      ||                      |——考题1|       ...

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

1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调...

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

C++引用与指针的比较 引用是C++中的概念,初学者容易把引用和指针混淆一起。 一下程序中,n是m的一个引用(reference),m是被引用物(referent)。 int m; int...

C++ 值传递 指针传递和引用传递

java中参数传递只有值传递,与java不同,C++中的参数传递方式有三种,分别是 值传递 指针传递和引用传递,值传递和指针传递都知识传递当前参数的一个副本,而引用传递则是直接传递参数,所以在函数中改...

C++中值传递、指针传递、引用传递

1. 值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调...

函数参数异同(值传递、指针传递、引用传递)

函数参数分值传递、指针传递和引用传递三种,比较异同点。最后以递归创建二叉树为例,分析指针和引用参数。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针传递 引用传递 值传递
举报原因:
原因补充:

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