函 数
l l 何 谓 函 数 ?
1. 1. C语言使用的函数可以写出非常漂亮的程序结构,使程序简单化,侦错容易。
2. 2. 将重复之某些指令撰写成一个函数,可减少编辑程序时间,更可使程序精简,清晰了解。
3. 3. C语言使用的函数其呼叫方法与数学上使用函数完全相同,
例 如 :
a = function ( x , y ) ;
表示将变量 x , y 输入函数 function , 其传回函数值设定给变量 a 。
l l 函 数 的 结 构 (格式)
1. 1. 函 数 的 定 义 (Function Definition)
2. 2. 呼 叫 函 数 (Function Call)
3. 3. 函 数 原 形 宣 告 (Function Prototype)
l l 函 数 的 定 义 (格式)
储存类别 资料型别 函数名称 (形式自变量的串行) { 形式自变量的宣告 ; 函数的本体(执行叙述) } | Example:
void Line (void)
{ int j;
for (j=1;j<20;j++) printf(“%d/n”,j);
} |
l l 函 数 的 储 存 类 别
| 函 数 的 储 存 类 别 |
| |
储存类别 | 功能叙述 | ||
static | 只能在进行宣告的编译单位内可以执行 | ||
extern | 在进行宣告的编译单位以外也可执行 | ||
|
|
|
|
ps. 一 般 函 数 的 储 存 类 别 可 以 省 略 , 此 时 当 作 "extern" 处 理 。
Example1: file1.c extern func1( ) { . . } static func2( ) { . } | Example2: file2.c extern func1( ); static func3( ) { . . func1( ); . } |
l l 函 数 的 传 回 值 与 资 料 形 态
要 求 函 数 送 回 传 回 值 (函数值) , 必 须 在 函 数 本 体 中 利 用 return 叙 述 进 行 , 例 如 :
return ( 变量或式子 ) ;
此 处 必 须 先 宣 告 传 回 值 (函数值) 的 资 料 形 态 是 什 么 。
return()叙述之目的如下
1. 1. 将控制权传回给呼叫程序
2. 2. 将return()叙述后括号内之数值传给呼叫程序之方式
l l 值 的 传 递 方 法
( 1 ) 传 递 变 数 值 本 身 ( Call by value )
( 2 ) 传 递 变 数 的 位 址 ( Call by reference )
Example 1: 传值呼叫 #include < stdio.h >
int func(a,b,c) int a,b,c; { int d; d=a+b+c; return(d); } void main(void) { int x,y,z,p; x=y=z=3; p=func(x,y,z); printf("p-->%d/n",p); } result : p-->9 | Example 2: 传址呼叫 #include < stdio.h > void func(a,b,c,d) int *a,*b,*c,*d; { *d=*a+*b+*c; } void main(void) { int x,y,z,p;
x=y=z=3; func(&x,&y,&z,&p); printf("p-->%d/n",p); }
result : p-->9 |
/* ================================================== */ /* 程序实例:傅值和传址的副过程调用(交换XY) */ /* ================================================== */ /* --------------------交换两值(传值副程序)-------------------- */ void swap1(int x,int y) { int temp; temp = x; x = y; y = temp; } /* ------------------- 交换两值(传址副程序) ----------------- */ void swap2(int *x,int *y) { int temp; temp = *x; *x = *y; *y = temp; } /* ---------------------主程序---------------------- */ void main() { int x = 10, y=0; /* 局部变量宣告 */ printf(" X Y /n"); printf(" 初值 %d %d /n",x,y); swap1(x,y); /* 传值副过程调用(交换XY) */ printf(" 传值 %d %d /n",x,y); swap2(&x,&y); /* 传址副过程调用(交换XY) */ printf(" 传址 %d %d /n",x,y); } | ||||||||||||
|