之前一直搞不清楚实参和形参的真正含义,总是搞混。现在,看了教材和一些优秀的博客,稍微明白了他们之间的区别。
用于接收传递值的变量被称为形参。
传递给函数的值被称为实参。
真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,它们必须有确定的值,以便把这些值传送给形参。
形式参数是指函数名后括号中的变量。因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
我们写一段代码感受一下:
#include<stdio.h> #include<stdlib.h> void Swap1(int x, int y) { int tmp = 0; tmp = x; x = y; y = tmp; } void Swap2(int *px, int *py) { int tmp = 0; tmp = *px; *px = *py; *py = tmp; } int main() { int num1 = 1; int num2 = 2; Swap1(num1, num2); printf("%d %d\n", num1, num2); Swap2(&num1, &num2); printf("%d %d\n", num1, num2); system("pause"); return 0; }
输出结果:
上面Swap1和Swap2函数中的参数想x,y,px,py都是形式参数。在main函数中传给Swap1的num1和num2和传 给Swap2函数的&num1,&num2是实际参数。
让我们对函数的形参与实参进行分析:
代码对应的内存分配:
这里可以看到Swap1函数在调用的时候,x,y拥有自己的空间,同时拥有了和实参一模一样的内容。所以我们可以 简单的认为:形参实例化之后其实相当于实参的一份临时拷贝。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。