函数的学习有八点:1.函数是什么 2.库函数 3.自定义函数 4.函数参数 5.函数调用 6.函数的嵌套调用和链式访问 7.函数的声明和定义 8.函数递归
以下对自定义函数做出小结。
一.自定义函数
ret_type fun_name(paral,*)//返回类型 函数名(函数参数)
{
statement;//语句项
}
eg1.写一个函数,找出两个整数的最大值
int get_max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int a=10;
int b=20;
int max=get_max(a,b);
printf("%d\n",max);
return 0;
}
二.函数参数
1.实际参数(实参)
真实传给函数的参数,叫实参。实参可以是:常量,变量,表达式,函数等。无论是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传给形参。
2.形式参数(形参)
指函数名后括号中的变量。因为形参只有在函数被调用的过程中才实例化(分配内存单元),当函数调用完成后就被销毁了,因此形参只在函数中有效。
eg2.写一个函数可以交换两个整型变量的内容
错误写法:
void Swap(int x,int y)
{
int tmp=0;
tmp=x;
x=y;
y=tmp;
}
int main()
{
int a=10;
int b=20;
Swap(a,b);
printf("a=%d b=%d",a,b);
return 0;
}
错误原因:当实参传给形参的时候,形参其实时实参的一份临时拷贝,对形参的修改是不会改变实参的。所以结果换不了,因为xy与ab无联系
所以应用取地址的方式改变ab的值。
取地址与解引用操作:
int main()
{
int a=10;
int* pa=&a;//&a拿到a的地址,拿出来后是个数字
地址要存起来,给一个变量pa
pa的类型用int*表示
*pa=20;//把pa进行解引用操作:通过pa地址找到pa内容(*pa就是a)。
并将a值改成20
printf("%d\n",a);
return 0;
}
正确写法:
void Swap(int* pa,int* pb)
{
int tmp=0;
tmp=*pa;
*pa=*pb;
*pb=tmp;
}
int main()
{
int a=10;
int b=20;
Swap(&a,&b);
printf("a=%d b=%d\n",a,b);
return 0;
}