C和C++形参实参以及参数的传递方式总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Swap(Counter1, Counter2);
}
void Swap(uint8 & Parameter1, uint8 & Parameter2)
C/C++中实参与形参的应用
石璐
1.
本笔记主要整理了C/C++中形参与实参定义及区别,以及参数的值传递、地址传递、引用传递的作用与意义。
2.
Hale Waihona Puke Baidu2.1
形参全称为"形式参数"是在函数定义的首部函数名后括号中说明的变量。形参定义时编译系统并不为其分配存储空间,也无初值,只有在函数调用时,临时分配存储空间,接受实参的值。当函数调用结束,内存空间释放,值消失。并且,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。
void main(void)
{
uint8 Counter1 = 3u;
uint8 Counter2 = 5u;
Swap(Counter1, Counter2);
}
void Swap(uint8 Parameter1, uint8 Parameter2)
{
uint8 Temp = 0u;
Temp = Parameter1;
*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.2
地址传递其实也是值传递,只不过传递的参数是地址而已。此时形参也会将实参的值拷贝下来,只不过此时的形参值是地址,前面我们已经知道实参与形参的数据传递是单向的,但是由于内存空间的唯一指向性,所以此时的实参和形参都会指向同一个内存单元,即形参所指向的单元发生变化,实参地址的内存单元也会变化。下面就通过代码和示意图说明。
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的改变而改变,因为它们占用的是不同的内存单元。
2.2
实参全称为"实际参数"是当一个函数被调用的时候在被调用处给出对应的参数。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值,并且实参是单向的将值传给形参。
3.
3.1
值传递顾名思义就是将实参的实际值传递给形参,此时形参就相当于将实参的值拷贝下来,参与被调用函数的运算,而改变形参的值并不会影响外部实参的值(实参->形参,单向的值传递)。下面就通过代码和示意图说明。
void main(void)
{
uint8 Counter1 = 3u;
uint8 Counter2 = 5u;
Swap(&Counter1, &Counter2);
}
void Swap(uint8 *Para1_Ptr, uint8 *Para2_Ptr)
{
uint8 Temp = 0u;
Temp = *Para1_Ptr;
3.3
在引用传递时,形参就相当于是实参的“别名”,对形参的操作其实就是对实参的操作。在此过程中,实参实际上给形参传递的是实参地址,由于内存空间的唯一指向性,所以对形参的操作就改变了实参的值。下面就通过代码和示意图说明。
void main(void)
{
uint8 Counter1 = 3u;
uint8 Counter2 = 5u;
相关文档
最新文档