石家庄网站设计制作服务,做动漫图片的网站,什么浏览器可以看违规网站,查看网站是否收录C/C函数传参方式我想很多朋友应该都知道#xff0c;但是不同传参方式的背后他们的区别是什么我想很多人并不那么清楚。本文就给大家揭露一下各传参方式的区别。传参方式有这三种#xff1a;值传递、引用传递、指针传递大家可以去看三种传递方式的写法的区别#xff0c;关于写…C/C函数传参方式我想很多朋友应该都知道但是不同传参方式的背后他们的区别是什么我想很多人并不那么清楚。本文就给大家揭露一下各传参方式的区别。传参方式有这三种值传递、引用传递、指针传递大家可以去看三种传递方式的写法的区别关于写法的区别就不在这里讲了。我只要将一下三种方式的运行效率和特征值传递我们在main函数里将func2和func3先注释掉然后运行并查看汇编代码看看是什么结果先看运行结果吧说实话汇编其实我不是很懂但是用来比较运行效率是够用了的。这里将汇编的几个指令给大家稍微讲一下吧。MOV 传送字或字节. (mov ax 2把2放入寄存器)PUSH 把字压入堆栈CALL 过程调用好了解这几个就够了我们可以看到值传递在调用方法的时候先进行了两次传值然后再压栈然后call了一个系统函数然后又传了一次值然后才是调用了func1总共6个步骤。接下来我们看看运行完后我们cout看看test实参的变化我们发现输出的还是origion所以作为值传递在运行函数后不管函数里面对实参进行了什么运算是不会改变实参的值得引用传递接下来我们看一下引用传递还是一样先看汇编代码怎么样是不是吓一跳才两步直接压栈然后就调用函数func2这样运行速度该会比func1快多少呢。下面看下实参test的变化我们输出看一下changed怎么样是不是很神奇居然将实参值给改变了这是为什么呢这是因为引用传递的时候是将参数的地址传递给了函数这样在函数中的对实参所有操作都是直接在操作实参地址所以他能将实参值改变。指针传递最后我们看下指针传递先看汇编代码步骤跟引用传递时一样的然后我们看一下运行结果输出一下testchanged我们发现实参也被改变了这也是因为其实我们是将实参的地址传递给函数了。实测效率差别我们引入time.h来看运行时间。我们将每个方法的调用过程循环一百万次看下运行时间差距结果如下怎么样这个差距还是蛮大的这还是只有一个参数要是多几个并且参数尺寸大一些的话差距会更明显。最后把源代码给大家把有兴趣的可以自己试一试#include #include #include #include using namespace std;string test origion ;string changed changed ;string getTime(){time_t tt time(NULL);tm* t localtime(tt);t-tm_mon ;string mon to_string(t-tm_mon);string day to_string(t-tm_mday);string hour to_string(t-tm_hour);string min to_string(t-tm_min);string sec to_string(t-tm_sec);string times mon-day:hour:min:sec ;return times ;}void func1(string s)//值传递{s changed ;}void func2(string s)//引用传递{s changed ;}void func3(string* s)//指针传递{*s changed;}int main(){coutfor (int i 0; i 1000000; i){func1(test);}coutfor (int i 0; i 1000000; i){func2(test);}cout//func3(test);system(pause);return 0 ;}