一、函数的传值与传址
说起函数的传值与传址,外表看起来很高大上的样子,其实本质是都是传递一个数值而己。
-
在这里引入两个概念,就是函数的的两类参数。分别为:形式参数(形参)和实际参数(实参)。函数定义时的参数称为形参,函数调用时使用的参数称为实参。(第二点讲函数的调用也会用到这两个概念的。)
-
eg:使用函数交换两个变量的值。(这里给个例子吧。详细的会在注释标出。)
#include <stdio.h> int main(void) { int a = 4; int b = 5; printf("a = %d b = %d\n",a,b); //定义两个变量 int t = a; //swap的传值 a = b; //进行了有参交换 b = t; //对swap功能进行打包 printf("a = %d b = %d\n",a,b); return 0;
}
二、函数的调用
函数调用的一般形式有两种:
-
1函数语句 :
函数名 (实参表列); 或 函数名();[不要求函数带返回值]
eg:swap(x,y); -
2函数表达式:
m=max(a,b); -
3函数的嵌套调用:
虽然现在的IDE(集成开放环境)平台有的允许嵌套定义的,但函数不能嵌套定义,为了考虑兼容的问题,一般都不建议去嵌套定义的。
C语言允许进行嵌套调用。eg:
#include<stdio.h>
fun2(int x,int y)
{
int z;
z=2*x-y;
return z;
}
fun1(int x,int y)
{
int z;
z=fun2(x,x+y); //在fun1()内调用fun2()函数
return z;
}
main()
{
int a,b,c;
printf("Please input two number:");
scanf("%d%d",&a,&b);
c=fun1(a,b); ///调用fun1()函数
printf("%d\n",c);
} -
4函数的递归调用
定义:在调用一个函数的过程中,又直接或者间接地调用了该函数本身,这种形式称为函数的递归调用,这个函数就称为递归函数。
其实就是一句话:自身调用自身
一般的形式为:
递归返回func(满足递归的条件)
{
if(能使递归终止条件)
终止处理;
else
func(趋于递归终结的条件);
}
举个例子:用递归方法求n!(n>0)。
include<stdio.h>
long func(int n) //定义求阶乘的函数 func()
{
long m;
if(n==1)
m=1;
else
m= func(n-1)* n; //在函数的定义中又调用了自己
return m;
}
main()
{
int n; float y;
printf("input the value of n.\n");
scanf("%d",&n);
printf("%d!=%ld\n",n, func(n)); /输出n!
}
网友评论