文档介绍:函数?函数的定义,函数参数和函数的值?函数的调用(嵌套、递归) ?全局变量、局部变量、动态存储变量和静态存储变量 2017-2-19 第八章函数§ 概述?C是模块化程序设计语言? C语言由函数构成,但 C以源程序为单位进行编译?程序执行由 main 函数开始,调用其他函数后回到 main 函数,在 main 函数中结束整个程序的运行, main 函数是系统定义的,任何一个程序都必须有且只有一个 main 函数, main 函数的位置不受限制 2017-2-19 第八章函数?函数定义的一般形式 1. 无参函数的定义形式类型标识符函数名( ) { 声明部分语句 } 2. 有参函数的定义形式类型标识符函数名(形式参数表列 ) { 声明部分语句 } 例: print_message( ) { printf(" How do you do! \n); } int max(int x,int y) {int z; z=x>y?x:y; return (z); } 2017-2-19 第八章函数 ”空函数”的定义类型标识符函数名( ) { } :现代的和传统的例: dummy() { } 现代风格: int max(int x,int y) {…… } 传统风格 int max(x,y) int x,y; {……. } 例如:有参函数(现代风格) int max( int x, y ) { int z; z=x>y?x:y; return(z); }? 2017-2-19 第八章函数?函数分类?从用户角度?标准函数(库函数):由系统提供?用户自定义函数?从函数形式?无参函数?有参函数使用库函数应注意: 函数参数的数目和顺序,及各参数意义和类型函数返回值意义和类型需要使用的包含文件 2017-2-19 第八章函数§ 函数参数和函数的值?形参和实参 main( ) {int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); /* a,b 为实际参数*/ printf("Max is %d",c);} int max(int x,int y) / * x,y 为形式参数*/ {int z; z=x>y?x:y; return(z); } ?形参:定义函数时,函数名后面括弧中的变量名?实参:主调函数中调用一个函数时,函数名后面括弧中的参数 2017-2-19 第八章函数?说明: ?形参在调用时才分配内存单元,调用结束后释放(内存中实参和形参占不同的单元) ?实参与形参的数据传递为“值传递”,即单向传递,由实参传递给形参,但不能由形参传递给实参?实参与形参的类型要求相同或赋值兼容?实参要求有确定的值 2017-2-19 第八章函数例题 8-1 main( ) { int a , b ; a = 7 ;b= 11 ; swap(a , b) ; printf( “%d , %d\n ”,a, b) ; } swap(int x , int y) { int t ; t=x ; x=y ; y=t ; } 实参形参 7 11 a: b: 调用前: 调用结束: 7 11 a: b: t swap: 7 11 a: b: 117 x:y: 调用: 7 11 x:y: 11 a: b: 7 2017-2-19 第八章函数?函数调用过程: ,转向被调函数 ,并传递给对应的形参 ,继续运行… 2017-2-19 第八章函数?函数的返回值?形式: return( 表达式);或 return 表达式; ?功能: 将被调用函数中的一个确定值带回主调函数中?说明: ?函数的类型就是返回值的类型,如果函数值的类型和 return 语句中表达式的值不一致, 则以函数类型为准. ?如果没有 return ,函数将带回一个无用的值(不确定的) ? void 型(空类型)