C语言 - 函数:函数定义

函数

1 - C 程序是由函数构成的,每个函数负责完成一部分的功能,函数将功能封装起来,以供程序调用。函数是具有某种特定功能的代码块

2 - 函数的分类

① 从函数定义角度分为库函数(printf、scanf、puts、gets、putchar、getchar、strcat 等)和用户定义函数

② 从有无返回值、主调函数和被调函数之间的数据传递角度又分为:无返回值无参函数;无返回值有参函数;有返回值无参函数;有返回值有参函数

函数定义

1 - 函数通常包括三部分:函数名、函数体、调用;类型标识符和函数名称为函数头;( ) 中的内容称为形参,不管 ( ) 中有没有值,都不能将其省略

2 - 函数的定义和声明不是一个概念,定义是对整个函数功能的确立,包括函数名、函数类型、函数体、形参等

3 - 代码示例

① 函数定义

 1 #include <stdio.h>
 2 // 定义:方式一
 3 int sumValue(int a,int b){
 4     
 5     int sum = 0 ;
 6     sum = a + b;
 7     return sum;
 8 }
 9 // 定义:方式二
10 // 可在 main 函数头上声明函数并在 main 函数底下进行实现
11 int plusValue(int a,int b);// 若把该函数的声明屏蔽掉,在 main 函数中调用会产生警告
12 
13 int main(int argc, const char * argv[]) {
14     
15     // 调用
16     int sum =sumValue(10, 20);
17     printf("sum = %d\n",sum );
18     
19     int plus =plusValue(200, 300);
20     printf("plus = %d\n",plus );
21     
22     return 0;
23 }
24 
25 // 实现函数
26 int plusValue(int a,int b){
27     
28     int plus = 0 ;
29     plus = a + b;
30     return plus;
31 }

② 如何使用函数

// - funcs.h

 1 #include <stdio.h>
 2 
 3 void hello ();// 无参无返回值
 4 
 5 float PI();   // 无参有返回值
 6 
 7 int max (int a,int b);       // 有参有返回值
 8 
 9 void printNumber(int number);// 有参无返回值
10 
11 int sumOfOneToNumber(int number);
12 
13 int sumOfOneNumberToAnotherNumber(int min,int max);
14 
15 int subValue(int c,int d);

// - funcs.c

 1 #include "funcs.h"
 2 void hello (){
 3     
 4     printf("hello world\n");
 5 }
 6 
 7 float PI(){
 8     return 3.1415926;
 9 }
10 
11 int max (int a,int b){
12     
13     return  a>b ?a:b;
14 }
15 
16 
17 void printNumber(int number){
18     printf(" %d",number);
19 }
20 
21 int subValue(int c,int d){
22     
23     int sub = 0;
24     sub = c-d;
25     return sub;
26 }
27 
28 // 计算 1 到 100 的和
29 int sumOfOneToNumber(int number){
30     
31     int sum =0;
32     for(int i =0;i< number+1;i++){
33         sum +=i;
34     }
35     return sum;
36 }
37 
38 
39 
40 // 从一个数到另一个数的和
41 int sumOfOneNumberToAnotherNumber(int min,int max){
42     
43     int sum =0;
44     for(int i = min ;i<max+1;i++){
45         sum +=i;
46     }
47     return sum;
48 }

 // - main.m

 1 #include <stdio.h>
 2 #import "funcs.h"// 引入头文件
 3 int main(int argc, const char * argv[]) {
 4     
 5     // 输出指定语句
 6     hello();
 7     
 8     // π 的值
 9     double r =10;
10     double s= PI()*r*r;
11     printf("%f\n",s);
12     
13     // 比大小
14     printf("%d\n",max(100, 20));
15     
16     // 
17     int t =subValue(30, 10);
18     printf("%d\n",t);
19     
20     // 输出参数
21     printNumber(10);
22     
23     // 计算从 1 到 100 的和
24     int a =sumOfOneToNumber(100);
25     printf("%d\n",a);
26     
27     // 计算一个数到另一个数的和
28     int b = sumOfOneNumberToAnotherNumber(20, 30);
29     printf("%d\n",b);
30     
31     return 0;
32 }

注:形参变量只有在被调用时才分配内存单元,在函数调用完毕时会立刻被释放掉

return 关键字

1 - return 的作用

① 退出函数,return 后面的语句不再执行

② 返回一个具体的值给调用者

注:如果没有写清楚返回值的类型,则默认为 int 型。就算明确声明了返回值类型,也可以返回空值;一个函数只能有一个返回值

多人协作

1 - 函数的实现放在 .c 文件中,函数的声明放在 .h 文件中。其中 .h 文件生下来就是打酱油被别人拿来拷贝包含的,编译链接时不用写出

2 - main 函数的返回值是返回给操作系统的,0 为正常退出,其他值为非正常退出(返回值对程序本身没有影响,仅作标记)

3 - printf 函数是由返回值的,它返回的是字符数

printf("%d \n",printf("abc\n"));
printf("%d \n",printf("abc男\n"));

日志信息

小结

1 - 函数之间是平等的,不能嵌套定义函数,但是可以嵌套调用

2 - 函数不可以重复定义,但是可以重复声明(覆盖)

3 - 函数如果是只要声明没有实现,那么编译可以成功,但链接时会失效

 

posted on 2017-08-02 14:55  低头捡石頭  阅读(79)  评论(0编辑  收藏  举报

导航