第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
#include <stdio.h>
int g_var = 10;
// float g_var = 10;
struct Test
{
int x;
int y;
};
void f(int i,int j)
{
printf("i + j = %d\n",i + j);
}
int g(int x)
{
return (int)( 2 * x + g_var); // 在编译该文件时,g_var以float型处理
}
// 43-1.c
#include <stdio.h>
#include <malloc.h>
// 声明,告诉编译器g_var在外部的文件中
extern int g_var;
// extern float g_var;
struct Test; // extern struct Test; extern可以省略
int main()
{
// 声明两个函数
extern void f(int,int);
extern int g(int);
struct Test* p = NULL; // 可以这样定义指针,,但是不能定义该结构体对用的变量
// struct Test* p = (struct Test*)malloc(sizeof(struct Test)); // error,因为在编译该文件时不知道struct Test的具体成员,也就不知道它的大小
printf("p = %p\n", p);
//g_var = 10;
printf("g_var = %d\n", g_var); // 如果前面是 extern float g_varl; 这里打印垃圾值,浮点数和整型在内存中的存储方式不同
f(1, 2); // i + j = 3
printf("g(3) = %d\n",g(3)); // g(3) = 16
free(p);
return 0;
}