用函数实现模块化程序设计
一、定义函数
1.指定名字、指定类型、指定函数的参数名和类型、指定函数的功能
2.一般形式
类型名 函数名()
{
函数体
}
二、调用函数
1.一般形式:函数名(实参表列)
2.作用:可作为单独一个语句,函数表达式以及另一个函数的参数
3.调用过程中的数据传递:系统会把实参的值传递给被调函数的形参
4.函数的返回值
(1)通过return语句获得
(2)返回值类型和函数类型一致
三、对被调函数的声明和函数原型
1.在主函数中对自定义函数进行声明,把函数名、函数参数的个数和类型等信息告知编译系统
2.函数的首行(即函数首部)称为函数原型
3.使用函数原型作声明 #声明时可省略参数名;若自定义函数在主函数之前就不必再次声明
四、函数的递归调用
1.定义:在调用一个函数的过程中又出现直接或间接地调用该函数本身
2.有限次、有终止
五、数组作为函数参数
1.数组元素作函数实参(!不能用作形参)#数据传递的方式是从实参到形参,单向传递 ##打擂法
2.一维数组名作函数参数,向形参传递的是数组首元素的地址 ##形参数组首元素和实参数组首元素具有同一地址###选择法
3.多维数组名作函数参数(!在定义第二维及二维以上的数组时,必须指定列数)
六、变量的存储方式和生存期
1.存储方式:静态存储和动态存储
静态存储:程序运行期间由系统分配固定的存储空间 #全局变量
动态存储:程序运行期间根据需要进行动态分配存储空间 #形参,自动变量,函数调用时的现场保护和返回地址等
2.局部变量存储类别:
(1)自动(auto)变量:没有声明为静态存储类别的局部变量 #用关键字(auto)作声明,可省略,默认的自动存储类别为动态
(2)静态(static)局部变量:函数调用结束后,不释放储存单元的局部变量 #用关键字(static)作声明,只赋一次初值
(3)寄存器(register)变量:存放在CPU中的寄存器的局部变量 #用关键字(register)作声明,可提高效率
3.全局变量的存储类别:
(1)在一个文件内扩展外部变量的作用域 :在引用前,用关键字(extern)进行声明
(2)将外部变量的作用域扩展到其他文件 :在引用前,用关键字(extern)进行声明
(3)将外部变量的作用域限制在本文件内 :在定义外部变量时加一个static声明
·
七、内部函数和外部函数
1.内部函数(静态函数):只能被文本文件中其他函数调用的函数 #static 类型名 函数名 (形参表)
2.外部函数:可供其他文件调用的函数 #extern 类型名 函数名 (形参表)定义函数时省略,则默认为外部函数
指针
一、指针就是地址
1.通过指针能找到以它为地址的储存单元。
2.地址包括位置信息(内存编号,或称纯地址)和它所指向的数据的类型信息。
3.指针变量:专门用来存放另一个变量地址的变量(就是地址变量)
4.定义指针变量:类型名 *指针变量名 #必须指定基类型
5.引用指针变量
(1)给指针变量赋值
(2)引用指针变量指向的变量
(3)引用指针变量的值
#& 取地址运算符,是变量的地址:* 指针运算符,代表指针变量指向的对象
二、指针变量做函数参数
1.将一个变量地址传送到另一个函数中
2.可以得到多个变化了的值
3.不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指变量的值
三、通过指针引用数组
1.数组元素的指针就是数组元素的地址
2.如果指针变量p已经指向数组中的一个元素,则p+1指向同一数组的下一个元素,p-1指向同一数组的上一个元素
3.引用数组元素可以通过下标法(a[i]),也可以通过指针法(*(p+i))
4.*(p++)先取*p值,然后使p+1;*(++p)先使p+1,再取*p
四、通过指针引用字符串
五、指向函数的指针