学习内容:
#include <stdio.h>
void Swap1(int x, int y) // x,y为形式参数
{
int tmp = 0;
tmp = x;
x = y;
y = tmp;
}
void Swap2(int *px, int *py) { //px,py为形式参数
int tmp = 0;
tmp = *px;
*px = *py; //"*"为解引用运算符
*py = tmp;
}
int main()
{
int num1 = 1;
int num2 = 2;
Swap1(num1, num2);//num1,num2是实际参数。
printf("Swap1::num1 = %d num2 = %d\n", num1, num2);
Swap2(&num1, &num2);//&num1,&num2是实际参数。
printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
return 0;
}
学习产出:
1、1
实际参数(实参):
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形
参。
1、2
形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配
内存单
元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中
有效
重点解析
2、在Swap1函数调用的时候num1和num2传给x,y后,num1和num2拥有自己的地址,但x,y也拥有自己的地址他们都互不相同,即
以简单的认为:形参(x,y)实例化之后其实相当于实参(num1和num2
)的一份临时拷贝。这就是所谓的传值调用(
函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。
)回到1、2最后一句话中,函数调用完后改变的是形参,而形参会自动销毁对实参没有一点影响。
在Swap2函数中,实参为&num1和&num2,传的是地址,在
Swap2函数中使用解应用运算符(*)对形参进行赋值,最终会改变实参即
传址调用 (
传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。
这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操
作函数外部的变量。)
3、总结:调用函数时,需要在函数中对实参进行操作时,必须传递地址。