关闭

指针传递 引用传递 值传递

53人阅读 评论(0) 收藏 举报

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

使用指针的好处:

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

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

3)可以动态分配内存。


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

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


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

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

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

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

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


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



不能建立引用数组。

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

不能建立引用的引用。


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


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


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


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


















0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5519次
    • 积分:478
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:26篇
    • 译文:0篇
    • 评论:0条
    文章存档