一.无参函数和有参函数
1.无参函数:主调函数不必被调用函数提供参数
void printstar()
{
printf("*****\n");
}
int main()
{
printstar();
... ...
}
2.有参函数:由主调函数向被调用函数提供数据
int max(int x,int y)
{
return (x>y)?x:y;
}
int main( )
{
… …
m=max(a,b);
… …
}
二.形式参数和实际参数
#include <stdio.h>
int gcd(int n1, int n2) //形式参数表列
{
int r;
while(n2!=0)
{
r=n1%n2;
n1=n2;
n2=r;
}
return n1;
}
int main()
{
int num1,num2;
int iGcd;
scanf_s("%d %d",&num1,&num2);
iGcd=gcd(num1, num2); //实际参数表列
printf("the gcd is: %d\n",iGcd);
return 0;
}
三.实参对形参变量进行“值传递”
#include <stdio.h>
void fun(int x, int y) //形式参数
{
x=x*10;
y=y+x;
printf("%d\t%d\n", x, y);
}
int main()
{
int a=2, b=3;
fun(a+b,a*b); //实际参数
printf("%d\t%d\n", a, b);
return 0;
}
运行结果:
50 56
2 3
形参只能是变量!
实参可以是常量、变量、表达式!
四.形参和实参对应的存储空间
定义函数时指定形参,但并不分配存储单元;
函数调用时,才为形参分配内存单元,以便接收实参传来的数据;
调用结束后,形参所占的内存单元也被释放;
不同函数可以使用同名形参变量;
五.实参单元与形参单元是不同的单元
#include <stdio.h>
void fun(int a, int b)
{
a=a*10;
b=b+a;
printf("%d\t%d\n", a, b);
}
int main()
{
int a=2, b=3;
fun(a, b);
printf("%d\t%d\n", a, b);
return 0;
}
运行结果:
20 23
2 3
*函数调用时,形参值的改变,并不会改变主调函数中实参的值。