第43课 - 函数的意义

第43课 - 函数的意义

1. C语言中的函数

追溯一下C语言发展的历史,我们知道C语言在早期是用在科学计算上的,而科学计算就是使用各种算法处理数据

在C语言中就是使用函数实现算法。

 

2. 函数的意义

(1)模块化程序设计

      

(2)C语言中的模块化   ==>  使用函数完成模块化编程

     

3. 面向过程的程序设计

(1)面向过程是一种以过程(过程即解决问题的过程)为中心的编程思想。首先将复杂的问题分解为一个个容易解决的问题,分解过后的问题可以按照步骤一步步完成。

(2)函数是面向过程在C语言中的体现,解决问题的每个步骤可以用函数来实现。

4. 声明和定义

(1)声明的意义在于告诉编译器程序单元的存在

(2)定义则明确指示程序单元的意义

(3)C语言中通过 extern 进行程序单元的声明

(4)一些程序单元在声明时可以省略extern,比如声明结构体的类型,extern struct Test  <==> struct test

【声明和定义不同】

// global.c

 1 #include <stdio.h>
 2 
 3 int g_var = 10;
 4 // float g_var = 10;
 5 
 6 struct Test
 7 {
 8     int x;
 9     int y;
10 };
11 
12 void f(int i,int j)
13 {
14     printf("i + j = %d\n",i + j);
15 }
16 
17 int g(int x)
18 {
19     return (int)( 2 * x + g_var);   // 在编译该文件时,g_var以float型处理
20 }

// 43-1.c

 1 #include <stdio.h>
 2 #include <malloc.h>
 3 
 4 // 声明,告诉编译器g_var在外部的文件中
 5 extern int g_var;
 6 // extern float g_var;
 7 
 8 
 9 struct Test;  // extern struct Test;  extern可以省略
10 
11 int main()
12 {
13     // 声明两个函数
14     extern void f(int,int);
15     extern int g(int);
16 
17     struct Test* p = NULL; // 可以这样定义指针,,但是不能定义该结构体对用的变量
18 
19     // struct Test* p = (struct Test*)malloc(sizeof(struct Test));  // error,因为在编译该文件时不知道struct Test的具体成员,也就不知道它的大小
20 
21     printf("p = %p\n", p);
22 
23     //g_var = 10;
24 
25     printf("g_var = %d\n", g_var);  // 如果前面是 extern float g_varl; 这里打印垃圾值,浮点数和整型在内存中的存储方式不同
26 
27     f(1, 2);  // i + j = 3
28    
29     printf("g(3) = %d\n",g(3));  // g(3) = 16
30 
31     free(p);
32 
33     return 0;
34 }
posted @ 2019-11-13 23:14  Hengs  阅读(723)  评论(0编辑  收藏  举报