如何定义函数
定义函数的基本格式:
返回类型 函数名(函数参数)
{
函数体;
}
例如:定义一个两数相加的函数
int Add ( int x ,int y)
{
return x+y;
}
返回类型为:int
函数名为:Add
函数参数为:x,y
调用函数(传值)
例如:定义 比较两个数大小 的函数
#include <stdio.h>
//定义函数名为get_max的函数,函数返回类型为int整型,函数参数为x和y
//定义函数
int get_max(int x , int y)
{
if(x>y)
return x;//如果x>y,说明x比较大,返回x
else
return y;//否则返回y
}
int main ()
{
int a = 10;
int b = 20;
//调用函数get_max,比较大小,返回较大的值
//调用函数
int max = get_max(a,b);//定义max,并将返回的最大值存入max
printf("%d",max);//打印max
return 0;
}
执行结果为:
注意:程序是从main函数开始运行,main函数结束运行
x与y是形参(也就是形式参数,不分配存储空间,形参变量只有在被调用时才分配内存单元,且与实参不一样,在调用结束后,就会释放所分配的内存单元)
a与b是实参,将a传给x,b传给y
x得到a的值10,b得到y的值20,执行函数体的内容,返回20。存入max
调用函数(传址)
定义一个函数,实现两个值的互换 ,利用上面的方法,试一试能不能实现
#include<stdio.h>
//定义函数名为swap的函数,函数返回类型为void空,函数参数为x和y
void swap(int x,int y)
{
int temp;
temp = x;
x = y;
y = temp;//实现将x与y的值互换
}
int main()
{
int a = 10;
int b = 20;
printf("a=%d b=%d \n",a,b);//互换前打印a与b的值
swap(a,b);
printf("a=%d b=%d",a,b);//互换后打印a与b的值
return 0;
}
运行结果为:
我们发现,a与b的值并没有成功互换。
因为,我们使用的是普通变量调用,也就是值调用。参数的传递是从实参变量到形参变量的单方向传递,在函数swap中实现了x与y的交换,当swap函数执行完,swap中定义的变量被销毁,回到主函数后,a和b没有受到任何影响。
改为传址的方式
修改为:
#include<stdio.h>
//定义函数名为swap的函数,函数返回类型为void空,函数参数为x和y
void swap2(int *x,int *y)//形参与实参的类型需一致,使用指针接收地址
{
int temp;
temp = *x;//调用函数时,*x 代表的就是a的值 ,*y 代表的就b的值
*x = *y;
*y = temp;
}
int main()
{
int a = 10;
int b = 20;
printf("a=%d b=%d \n",a,b);//互换前打印a与b的值
// swap(a,b);
swap2(&a,&b);//将a与b的地址传入函数
printf("a=%d b=%d",a,b);//互换后打印a与b的值
return 0;
}
运行结果为:
在函数swap2被调用时,将实参a、b的地址值传入x、y。
x与y中分别存放的是a和b的地址,由于*x与a代表的是同一存储单元,只要*x改变了,那么也就改变了a存储单元的内容。