形参和实参的区别(转载)
(C++中的讨论) 形参出现在函数定义中,在整个函数体内部都可使用,离开函数则不能使用;实参出现在主调函数中,进入被调函数后,是参变量不可用。形参和实参的主要功能是数据传送,发生函数调用时,主调函数把实参的值传递给被调函数的形参从而实现主调函数向被调函数的数据传送。
形参变量只有在被调用时才分配内存单元,在调用结束后,即刻释放所分配的内存单元,因此,形参只有在函数的内部有效,函数调用结束后,则不能再使用。
实参可以是常量、变量、表达式、函数等、无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
实参和形参在数量上、类型上、顺序上应严格一致。
函数调用中发生的数据传送是单向的,即只能把实参的值传递给形参而不能把形参的值传递给实参,因此在函数调用过程中,形参的值发生改变,而实参的值不会改变。
当形参和实参不是指针类型时,该函数运行时,形参和实参是不同的变量,它们在内存中位于不同的位置,形参将实参的内容复制一份。该函数运行结束时,形参被释放,而实参内容不会改变。而如果函数的参数是指针变量,在调用该函数的过程中,传给函数的是实参的地址,在函数内部使用的也是实参的地址,所以可改变实参的值。
函数调用的过程,是一个中断的过程(参数入栈、函数跳转、保护现场、恢复现场)。主调函数与被调函数之间通过栈进行参数传递,因此对被调函数参数的访问是通过栈来访问的,而被访问的参数也是主调函数复制到栈上的。