C++ 参数的三种传递

C++ 参数的三种传递


这三种传递分别是值传递指针传递引用传递。值传递是我们常见的传递方式,不管是在C#还是JAVA,都是有值传递的,C++也不例外,那么指针和引用则和值传递不同,不同之处呢,则是它们传递东西不同,都是都可以把一个值传给某个函数使用,它们不同之处我们通过一些例子来说明。

三个例子的代码:

#include <iostream>
using namespace std;

void test1(int a) {
    a += 3;
    cout << "a的值:" << a << "\n"
    << "a的地址:" << &a << "\n";
}

void test2(int *a)
{
    *a += 3;
    cout << "a的值:" << a << "\n"
    << "a的地址:" << &a << "\n" << "a所指向地址的值:" << *a << "\n";
}

void test3(int &a)
{
    a += 3;
    cout << "a的值:" << a << "\n" << "a的地址:" << &a << "\n";
}
int  main()
{
    int b = 10;
    test1(b);
    //test2(&b);
    //test3(b);
    cout << "b的值:" << b << "\n"  << "b的地址:" << &b << "\n";
    return 0;
}

1.值传递

test1(b);


这是一个简单的值传递,而地址就是内存位置,学过C++的人都清楚,下面是运行的结果


根据代码和结果我们可以知道的是值传传递的参数是有自己的内存的,并且当b把自己的值传递进去之后,对b是没有影响的,那么值传递则是等于把b的值赋给了a等于进行了一个赋值操作这就是值传递。

2、指针传递

test2(&b);


这是一个指针传递,可以明显的发现和值传递的差别,指针是存储地址的,当我们想要把b的值传进test()函数时,我们传的是b的地址,然后通过b的地址,来获得b的值,下面是结果


我们输出的跟值传递不同的是什么呢,很明显的是这次输出的地址比值传递多一个地址,那这个多的地址和b的地址一模一样,可以说明的是指针传递的是地址,然后还有不同的是b的值也被改变了,这就指针传递和值传递的不同

3、引用传递

test3(b)


在代码上是不是发现和值传递差不多,只是参数声明哪里比值传递的多了一个&符号其他的和值传递一样,但是就是在参数声明哪里多一个&符号,它就不是值传递,它的传递方式和值传递的是完全不一样的,所以在写参数声明时,要注意不要在你需要的引用传递时漏了一个&符号,它们的不同之处在哪里呢,我们看输出结果就知道了,下面是结果:


可以发现的是a的值和b的值是一样的,上面我们说指针传递时,是输出了一个a所指向地址的值,它的值和b的值是一样,那么引用是不是和指针一样传的地址呢,其实不是的因为引用传递其实是等于把b作为test()函数的全局变量,为什么这样说呢,是因为a的地址和b相同,然后a所做的所有操作都等于b做的,这a像是b的什么呢,这是名字不同,其他一样,a其实就是b的一个别名,所以test()函数对a的所有操作,都等于对b进行,而a只是b的另外一个标识。
那么有人对引用传递还有疑惑对吧,&在参数处是引用在所有非参数声明处都是获取某个变量的地址。还有就是引用可不可以解地址对吧,其实是不可以的,我们可以看一下它如果对引用解地址的话会报什么错误。下面错误提示

它提示的*(解址符)的操作数必须是指针,意思只能对指针进行解址,对其他的类型是不能解址的。

然后我们总结一下值传递、指针传递和引用传递不同的地方,首先它们都是可以把值传递给函数的只不过是传递的方式不同,有一点是可以很明显的,指针传递和引用传递都会改变b的值,值传递不会,这就是值传递和另外的区别,而指针传递和引用传递的不同的地方则是指针传递的是b的地址,而引用传递则等于给b起了一个别名,然后通过别名来操作b的值,和它所在的内存地址。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值