C++知识点(11)_传递数组、指针和引用给函数

本章旨在帮助理解掌握值传递、指针传递、引用传递三种方式。

值传递:形参是实参的拷贝,改变形参的值不会影响外部实参的值,从被调用函数的角度来说,值传递是单向的,即从实参——>形参,参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者,采用值传递。
指针传递:形参为指向地址的指针,当对形参的指向操作时,就相当于对实参本身进行操作。
引用传递:形参相当于实参的别名。对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。

#include<iostream>
using namespace std;
void change1(int n)
{
    cout<<"值传递:"<<&n<<endl;
    n++;
}
void change2(int& n)
{
    cout<<"引用传递:"<<&n<<endl;
    n++;
}
void change3(int* n)
{
    cout<<"指针传递:"<<n<<endl;
    *n=*n+1;
}
int main()
{
    int n=10;
    cout<<"实参的地址:"<<&n<<endl;
    change1(n);
    cout<<"after change1() n="<<n<<endl;

    change2(n);
    cout<<"after change2() n="<<n<<endl;

    change3(&n);
    cout<<"after change3() n="<<n<<endl;
    return 0;
}

程序输出:

实参的地址:0x7fff948c0404
值传递:0x7fff948c03dc
after change1() n=10
引用传递:0x7fff948c0404
after change2() n=11
指针传递:0x7fff948c0404
after change3() n=12

结论:
从上述实验可以看出,实参的地址为ox7fff948c0404
1)当采用值传递时,函数操作地址是ox7fff948c03dc,并不是实参本身,所以对它进行操作并不能改变实参的值。即是说,函数操作是建立了另外一个临时空间。)
2)当采用引用传递时,操作地址就是实参地址,只是相当于实参的一个别名,对它的操作就是对实参的操作。
3)当采用指针传递时,操作地址也是实参地址。
问题:引用传递与指针传递的区别?
规则:
(1)引用被创建的同时初始化;指针在任何时候都可以被初始化。
(2)引用不能有NULL引用,引用必须与合法的存储单元关联;指针可以NULL
(3)一旦引用被初始化,就不能改变引用的关系;指针则可以随时改变所指的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值