函数 1、函数的概念 完成特定功能的代码段,它也是组成我们C语言源程序的基本单位 优点: 1)提高程序的可读性, 2)可以提高开发的效率 3)提高代码重用性 函数的分类: 库函数,用户定义函数,有无返回值,有无参数 4.、函数定义到使用分三步:1、声明。2、定义函数。3、调用函数。 //------------------------函数的定义 格式: 返回值 函数名(形参列表){ 函数体; return } 命名规则: 1、只能由字母、数字、下划线或者美元符号($)组成 2、不能以数字开头 3、不能与关键字重名 4、严格区分大小写 4种 有参无返回值:void test(int x,float y){ } 无参无返回值:void test1(){ } 有参有返回值: int max(int x,int y){ returnx>y?x:y; } 无参有返回值: int test2(){ return 10;} int max(int x,int y){
//用if的方式判断 if (x>y) { return x; }else{ return y; } } int main(int argc, const char *argv[]) { //求两个数的最大值,用函数实现 int m = max1(12, 38); return 0; } 理解: 有返回值,说明,主函数调用之后,要赋值给某个变量,或者这个返回值有用途 函数名不能重名 小总结: 有参函数比无参函数多了参数表列 它们可以是各种类型的变量,各参数之间用逗号间隔,控制着被调函数 有返回值比无返回值多了 返回值类型,return 3、 //--------------------------函数的参数 1)形参和实参 形参:在定义函数的时候,函数名后面小括号中的参数 格式: 数据类型 变量如:int x; //形参 形式参数是什么样类型的数据,那么实际参数也必须是什么样的类型 形参变量只有在被调用时才分配内存单元 //记住 形参的作用域:只能在本函数中使用 在函数中,不能定义和形参同名的变量 //实参 实参:调用函数的时候传递的参数 可以是变量,也可以是常量,也可是是表达式,还能是函数 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参,因此应预先用赋值,输入等办法使实参获得 确定值。 max(56,78); 56、78就是两个实际参数 形参和实参的功能是作数值的传递。 发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。 3)实参和形参在 数量上 , 类型上 ,顺序上 应严格一致,否则会发生类型不匹配”的错误。 知道什么是主调函数,什么是被调函数 2)参数的传递的过程 1.实参的值拷贝一份放到函数形参中 2.实参的值是一个已经确定的值 3.类型要保持一致 4.形参的值可以改,但是实参不会变 //-------------------------函数的返回值 函数的值(或称函数返回值)是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。 //被调函数返回给主调函数的值 主调函数:A B两个函数 ,如果在A中调用了B,A叫主调函数,B被调函数 return:被调函数返回给主调函数的值 函数的返回值使用return 关键字进行返回 1) return 0; return (0); //括号可以省略 2) return a+b; return a>b?a:b; //可以是值也可以是表达式 3) 如果函数的返回值是空类型 void return ;//(程序返回了,不再向下执行) 4) 函数中可以有多个return ,但是只有一个起作用 5)函数定义的返回值类型与return的值类型不一致,以定义的函数类型为准 6)如果函数是整形,可以忽略返回值类型 //--------------------------函数的声明与调用 1)函数的声明: 为什么要进行声明? 类似于变量的使用,我们要使用函数,就应该先定义函数,编译器不知道我们是否已经 定义了某个函数,为了防止编译器编译的时候报错(函数调用) 所以,要告诉编译器,我已经定义了哪些函数
返回值类型 被调函数名( 类型形参, 类型 形参... ); 返回值类型 被调函数名( 类型, 类型...); 如: int max( int a, int b ); int max( int, int ); 1/如果被调函数的返回值是int类型,此时可以不用声明 2/如果被调函数写在主调函数之前,此时可以不用声明 3/可以全局声明,也可能在主函数里面声明 原则: 在调用函数之前,进行该函数的声明 声明的方法: 技巧:复制函数的头部,加上分号,写在调用调用方法之前 int max(int x,int y); //声明 //--------------------函数的调用 max(56,78); //调用 函数的调用 函数名(实参列表); 1) 函数表达式(该函数必须是有返回值) 函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数 是有返回值的. int z=0; z = max(23, 80)+1; 2) 函数语句 函数调用的一般形式加上分号即构成函数语句。 printf("%d",a);scanf("%d",&b); 3) 函数实参(该函数必须是有返回值) 函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送. 因此要求该函数必须是有返回值的。 printf("%d\n",max(20,30)); 4、函数名不能和变量名同名,也不能与函数名同名. #waring C语言中允许函数嵌套调用,但是不允许作嵌套的函数定义。 //----------------------递归函数 一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。 递归函数构成条件 1)自己调用自己 2)存在一个条件能够让递归结束 3)能让问题的规模能够缩小 栈 先进后出 堆 先进先出 //----------------------手动编译 编译--->.o(目标文件)--->链接--->.out 执行 cc -c main.c -------> cc main.o -------> ./a.out --------------------------------------- 华丽分隔线 ------------------------------- 持续更新 敬请期待
|