函数的概述
- 划分模块,分解问题,自顶向下,逐步求精
- 库函数和自定义函数
函数的定义、调用和声明
-
函数的定义
-
一般形式
函数类型 函数名(形式参数列表) -----函数头 { 声明部分 -----函数体 执行部分 }
-
return语句
函数的返回值
函数的结束标志
-
-
函数调用
- 一般调用形式
- 调用过程
- 调用方式
-
函数的声明
- 函数原型
- 函数声明的形式
- 函数声明的条件
- 函数声明的位置
函数中的参数
- 实际参数与形式参数
- 参数的传递方式
- 值传递
- 地址传递
函数的嵌套调用和递归调用
形参实参都为指针
#include<stdio.h>
void invert(int *x, int n) {
int *i, *j, t;
for (i = x, j = x+n-1; i < j; i++,j--) {
t = *i;
*i = *j;
*j = t;
}
}
int main() {
int a[10], i,*p=a;
printf("please enter the array:");
for (i = 0; i < 3; i++) {
scanf("%d", &a[i]);
}
invert(p, 3);
printf("now the array is : ");
for (i = 0; i < 3; i++) {
printf("%3d", a[i]);
}
return 0;
}
内部函数和外部函数
变量的作用域
- 局部变量
- 全局变量
变量的存储类型
-
动态存储和静态存储
- 存储类型
- 动态存储和静态存储:动态变量、静态变量、寄存器变量、外部变量
- 存储区域
- 可供用户使用的内存空间–>程序区、静态存储区、动态存储区
- 存储类型与存储区域的关系
- 变量的存储属性
- 存储类型
-
自动变量
auto 数据类型 变量列表: auto int b = 10; /* auto可省略不写 */
-
静态变量
-
静态局部变量
static 数据类型 变量列表; static int b = 10;
- 初始化只进行一次,每次调用保留上次函数调用结束时的值。
- 静态变量是与程序共存亡的,而自动变量是与程序块共存亡的。
- 若只定义不赋初值,则编译时自动赋初值0或’\0’(根据类型,数值或字符)。
-
静态全局变量
定义在函数外面
- 不能被其他文件中的函数访问。
-
-
寄存器变量
register 数据类型 变量列表; register int i = 1;
- 只适用于局部变量和函数的形式参数。
- 只能是整型变量。
- 局部静态变量不能定义为寄存器变量,不能写:“register static int a;”
-
外部变量
[extern] 数据类型 变量列表 [= 初始化表达式]
定义性声明建立实体,引用行声明建立标识符与实体之间的联系。
/*exmp_01.c*/ int a; extern void f(int q);
/*exmp_02.c*/ extern int a; void f(int q){...}