您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > C和C++形参实参以及参数的传递方式总结
C/C++中实参与形参的应用石璐目录1.摘要.........................................................................................................................................................32.形参与实参的定义...................................................................................................................................32.1形参................................................................................................................................................32.2实参................................................................................................................................................33.值传递、地址传递以及引用传递.............................................................................................................33.1值传递.............................................................................................................................................33.2地址传递.........................................................................................................................................53.3引用传递.........................................................................................................................................64.总结.........................................................................................................................................................75.参考文档.................................................................................................................................................71.摘要本笔记主要整理了C/C++中形参与实参定义及区别,以及参数的值传递、地址传递、引用传递的作用与意义。2.形参与实参的定义2.1形参形参全称为形式参数是在函数定义的首部函数名后括号中说明的变量。形参定义时编译系统并不为其分配存储空间,也无初值,只有在函数调用时,临时分配存储空间,接受实参的值。当函数调用结束,内存空间释放,值消失。并且,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。2.2实参实参全称为实际参数是当一个函数被调用的时候在被调用处给出对应的参数。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值,并且实参是单向的将值传给形参。3.值传递、地址传递以及引用传递3.1值传递值传递顾名思义就是将实参的实际值传递给形参,此时形参就相当于将实参的值拷贝下来,参与被调用函数的运算,而改变形参的值并不会影响外部实参的值(实参-形参,单向的值传递)。下面就通过代码和示意图说明。voidmain(void){uint8Counter1=3u;uint8Counter2=5u;Swap(Counter1,Counter2);}voidSwap(uint8Parameter1,uint8Parameter2){uint8Temp=0u;Temp=Parameter1;Parameter1=Parameter2;Parameter2=Temp;return;}函数调用前Counter1和Counter2的值分别为3和5;调用时给Parameter1和Parameter2分配空间,并将实参Counter1和Counter2的值分别传给Parameter1和Parameter2;交换时将Parameter1和Parameter2的值变成5和3;但调用后Parameter1和Parameter2的空间被释放;此时,Counter1和Counter2的值并没有因为Parameter1和Parameter2的改变而改变,因为它们占用的是不同的内存单元。3.2地址传递地址传递其实也是值传递,只不过传递的参数是地址而已。此时形参也会将实参的值拷贝下来,只不过此时的形参值是地址,前面我们已经知道实参与形参的数据传递是单向的,但是由于内存空间的唯一指向性,所以此时的实参和形参都会指向同一个内存单元,即形参所指向的单元发生变化,实参地址的内存单元也会变化。下面就通过代码和示意图说明。voidmain(void){uint8Counter1=3u;uint8Counter2=5u;Swap(&Counter1,&Counter2);}voidSwap(uint8*Para1_Ptr,uint8*Para2_Ptr){uint8Temp=0u;Temp=*Para1_Ptr;*Para1_Ptr=*Para2_Ptr;*Para2_Ptr=Temp;return;}函数调用前Counter1和Counter2的值分别为3和5;调用时给Para1_Ptr和Para2_Ptr分配空间,并且它们分别指向Counter1和Counter2的内存空间;交换时,Para1_Ptr和Para2_Ptr所指向的内存单元数据交换,即Counter1和Counter2的数据交换,分别为5,3;调用后Para1_Ptr和Para2_Ptr的空间释放。3.3引用传递在引用传递时,形参就相当于是实参的“别名”,对形参的操作其实就是对实参的操作。在此过程中,实参实际上给形参传递的是实参地址,由于内存空间的唯一指向性,所以对形参的操作就改变了实参的值。下面就通过代码和示意图说明。voidmain(void){uint8Counter1=3u;uint8Counter2=5u;Swap(Counter1,Counter2);}voidSwap(uint8&Parameter1,uint8&Parameter2){uint8Temp=0u;Temp=Parameter1;Parameter1=Parameter2;Parameter2=Temp;return;}函数调用前Counter1和Counter2的值分别为3和5;调用时实参Counter1和Counter2分别给形参Parameter1和Parameter2地址,即相当于同一个内存空间有两个名;交换时,Parameter1和Parameter交换,即Counter1和Counter2的数据交换,分别为5,3。4.总结对于参数传递方式的选择,我想应该是从被调函数的作用目的来选择,比如,仅仅是使用实参的值那就选择值传递的方式,改变实参的值,就考虑地址传递或引用传递,但是有一点要知道,实参与形参的传递只能是单向传递。5.参考文档C语言程序设计(第二版)科学出版社王曙燕主编
本文标题:C和C++形参实参以及参数的传递方式总结
链接地址:https://www.777doc.com/doc-2908444 .html