第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 }