函数参数传递方式包括,php函数的参数传递方式

关于一些函数参数传递方式包括和php函数的参数传递方式这类的相关题,不少人都是想知道的,那么就让小编带各位了解一下吧!


前言

我们可能听说过C语言中的值传递和指针传递。在其他语言中,也存在引用传递。那么它们之间有什么区别呢?如果您仍然无法准确地区分差异,那么是时候找出案了。

按值传递

我们刚学C语言的时候都是老师教的。以下方法不能交换a和b的值

includelt;stdiohgt;voidswapinta,intbintmainvoid运算结果

beforeswap:a=10,b=20swapa=20,b=10afterswap:a=20,b=10可以看出,在这种情况下,a和b的值确实交换了。

为什么有值传递和指针传递

看到这里,不知道你是否会疑惑,为什么向函数传递参数时,有时是值,有时是指针?为什么可以通过传递指针来改变参数的值呢?其实在C语言中,参数传递就是值传递!换句话说,你认为传递指针也是传递值,只不过它的值是指针类型。

我们用图来理解为什么a和b的值可以通过传递指针来交换

传递指针

从图中可以看出,虽然传递给函数的是a和b的指针的副本,但它的副本也指向a和b,所以虽然指针不能改变,但是a和b指向的参数是可以的改变内容,即改变原来的a和b的值。

查看传递的指针

如果是为指针p申请一段内存,下面的代码能达到目的吗?

includelt;stdlibhgt;voidgetMemeryintpintmainvoid通过前面的内容分析,肯定没有达到预期的效果。

运行结果

p的地址为零,为什么?我们还是用之前的知识来分析,因为传给getMemory函数的参数都是一个副本,所以函数内部的p也是外部p的副本,所以即使p指向函数内部新申请的内存,它仍然不会改变外面p的值,即p仍然指向NULL。

,

如何修改呢?我们需要传入p的地址,它是一个指向int类型指针的指针。

includelt;stdlibhgt;voidgetMemeryintpintmainvoid结果如下

p的地址是0x144f010从运行结果可以看到p的值已经改变了。

可以用下图来理解

总结

本文总结如下

函数的形参都是原始数据的“副本”,因此在函数内部无法更改原始数据

函数中的参数是按值传递的,而指针本质上也是按值传递的

如果要改变入参的内容,需要传入入参的地址,通过解引用的方式修改其指向的内容

以上结论不限于C语言

本文原文地址

思考

如何在不使用第三个变量的情况下交换两个整数的值?

结合本文,了解C++/Java中所谓的按引用传递

微信公众号【编程珍珠】专注但不限于分享计算机编程基础知识、Linux、C语言、C++、数据结构与算法、工具、资源等编程相关【原创】技术文章,数量包含大量经典电子书和视频学习资源。欢迎大家一起交流学习,一起修炼计算机“内功”,知其然,知其所以然。


有关函数参数传递方式包括和php函数的参数传递方式的相关题解完毕,请关注本站。

除非特别注明,本站所有文字均为原创文章,作者:admin

No Comment

留言

电子邮件地址不会被公开。 必填项已用*标注

感谢你的留言。。。