1.数值(参数)传递
所谓参数传递,我们知道在函数调用的时候像前面所讲的Add函数的调用
在这里x和y就叫做Add函数的形参而在main函数里面的i和j就叫做Add函数的实参
下面给一个例子来具体的理解参数传递
#include<stdio.h>
//计算排列数
double Fac(int n)
{
int j = 1; int num = 1;
for (j = 1; j <= n; j++)
{
num = num * j;
}
return num;
}
int main()
{
int n = 0;
int t = 0;
scanf("%d" ,&n);
scanf("%d", &t);
double vx=(double)(Fac(n)/Fac(n-t));
printf("结果是%.3lf\n", vx);
return 0;
}
像这样,给函数传递的是数值就可以理解为参数传递
这里给上运行的结果:
2.下面介绍一下地址传参
所谓地址传递跟数值传递一样,也就是给函数传递地址
下面给出例子,程序要求是将两个数值a和b交换数据要求使用函数
#incude<stdio.h>
Swap(int x, int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("交换前:a=%d,b=%d", a, b);
Swap(a, b);
printf("交换后:a=%d,b=%d", a, b);
return 0;
}
#include<stdio.h>
void swap(int* a, int* b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
int main()
{
int n = 10; int m = 20;
printf("交换前的n=%d,m=%d\n", n, m);
swap(&n, &m);
printf("交换后的n=%d, m=%d",n, m);
return 0;
}
下面是运行结果:
代码1:
代码2:
我们发现这两种分别是参数传递和地址传递的结果但是结果却不相同
这里我们需要了解一下形参和实参的关系
注意:“形参是实参的一份临时拷贝,在出函数的时候,临时拷贝的形参所拥有的内存会被cpu回收”这样就可以理解为什么改变形参却改不了实参的数值