这几天偶然在翻c的笔记,回头看到了我关于形参和实参的一些笔记,突然感觉是一颗子弹正中眉心。其实有时候回头看一眼自己的笔记会更能加深这个知识点的理解。
很多时候我们都是在函数调用的时候来用到实参和形参,但盲目按照代码一贯打下去,我们是一知半解的,下次遇到同样的题,你可能凭借记忆力来可以复述一次代码,但想要完全理解,是需要自己对形参和实参有个确切的概念的。
比如来说,我们可以引入一个交换函数(swap)的例子来简单介绍一下
void swap(int x, int y) //x,y就是形参
{
int z = 0;
z = x;
x = y;
y = z;
}
void swap2(int* px, int* py)
{
int z = *px;
*px = *py;
*py = z;
}
int main() {
int a = 0;
int b = 0; //a,b就是实参
scanf("%d,%d", &a, &b);
printf("交换前是:a=%d b=%d\n", a, b);
swap2(&a, &b);
printf("交换后是:a=%d b=%d\n", a, b);
return 0;
}
实参
字面意思,就是真实传给函数的参数,可以是常量、变量、表达式、函数。
无论实参是什么类型,在进行函数调用的时候,都是要有具体值来确定的。
形参
在函数未被调用时,形参就没有开辟内存空间。
形参相当于是实参的一份临时拷贝。(就是说假装先有参数给你调用,但它真正意义上的存在是在实例化之后才出现的)
只有说在函数调用的时候进行实例化,才开辟内存空间。