函数
- 函数定义:
类型函数名(行参类型说明表,行参列表) /函数首部
{ /函数体
说明语句
执行语句
} - 类型名指定的是返回值的类型,无返回值时是void空类型
- dump(); 不执行操作,常用来表示尚未开发出来的函数。
- 不同数据之间类型转换
(数据类型)(表达式)
(int)(x+y)//将x+y的值转换为int型 - #define 标识符常量
#define 是一条预处理命令,就是把命令格式中的标识符定义为后面的常量值。
例:#define PI 3.14
void main (0)
{ int r=2;
float s,l;
l=2PIr;
s =PI* r*r;
printf(“l=%f,s=%f\n”,l,s);
} - swap()函数,交换数值
- 引用传递
函数调用实参传递给形参一律采用的是值传递,如果直接用变量名作为实参,函数形参的修改结果不会代入主调函数。此时就需要用到引用传递,即通过指针的形式实现。
用指针变量作行参,用元素地址做实参。
如下所示:
是不是很神奇呢? - 在同一个文件中,遵循函数先定义再使用的规则。
- 函数声明
主函数在调用函数之前对被调用函数的说明,即为函数说明。也就是将函数首部各部分通知编译系统,进行调用时的对照检查。
注:当自定义函数在主函数之后定义,且参数类型不是int 型或char型时,则一定要在主函数之前对函数进行说明,或在主函数的说明部分进行说明。
函数原型
函数声明的一般形式
函数类型函数的函数名(参数类型1 参数名,参数类型2 参数名) - fabs 函数
求绝对值的函数
注:#include<math.h> //头文件 - 函数嵌套
- 函数的递归调用
例:计算n!:
- 变量的作用域
局部变量:
在一个函数内部定义的变量或在一个符合语句中定义的变量称为局部变量,局部变量只能在其所在函数或符合语句中访问,其他函数不能访问局部变量。常见的局部变量:主函数中定义的变量、函数定义的变量、行参。
全局变量:
在所有函数包括(main函数)外定义的变量称为全局变量。
如果没有给全局变量赋值,编译器会自动给其赋予一个初始值,对数值型变量赋予0,对字符型变量赋予’\0’。
如果全局变量和某一函数内的局部变量同名,则在局部变量作用范围内,全局变量无意义。
例:利用全局变量计算圆的半径和面积
- 内存
内存用户可使用的部分分为程序区,静态存储区,动态存储区。
程序区是程序的代码
静态存储区和静态存储区用来存放数据,其变量生存期不同。
静态存储区的生存期从程序使用开始,到程序使用结束。
动态存储区的生存期是其所在函数调用开始,到函数调用结束。 - 变量的存储类型
- 静态局部变量:
static数据类型说明符 变量名;
静态局部变量在函数调用结束后仍然保持原值。在下一次函数调用时,该函数的值,就是上一次函数调用结束时保持的值。
注:
静态局部变量和全局变量一样,均只在编译的时候赋初值一次。以后再调用的时候不会重制初始值,而是上次函数调用时保留下来的值。
静态局部变量在定义时如果没有赋初始值,编译器会自动赋值为0,字符为’/0’。 - 自动变量:
auto数据类型说明符 变量名;
函数中的局部变量如果没有用关键字static声明存储类别,他就是自动变量,存储在动态存储区中。
注;
如果自动变量定义时有赋初始值的句子,那么函数在调用时都会重新赋值;如果自动变量没有赋初始值,那么在每次调用时都应先赋初始值,才能引用,否则该变量的值为随机的不定值。 - 寄存器变量:
register 数据类型说明符 变量名;
提高程序执行效率。
注:寄存器变量只能是char型、int型、short型或指针型。
寄存器变量的作用域和生命周期与自动变量相同,因此,只有自动类型变量可以声明为寄存器变量。 - 静态全局变量:
限制全局变量的作用域只能在本文件内,存储在静态存储区中。
static+全局变量; - 非静态全局变量
没有用关键字static来限制的全局变量可以在其他文件中访问,称为非静态全局变量。 - 外部变量声明语句:
extern 数据类型说明符 变量名;
在其他文件访问语句之前,用外部变量声明语句对已声明的非静态局部变量进行外部引用声明。
已经用外部声明语句声明过的变量称为外部变量。
外部声明语句还可以把全局变量作用域扩展到定义点之前。
存储类别
- 静态局部变量:
- 内部函数(静态函数)
只能被本源文件中的函数所调用
static类型说明符 函数名(行参) - 外部函数
在整个源文件中都有效。
entern 函数原型;
注:在函数定义时可以不加关键字extern,C语言隐含其为外部函 数。
如果要在其他源文件中调用外部函数,则须用extern加函数原型对他进行外部引用说明。 - 返回指针值的函数
int *p (int x)
返回值为指针类型的函数即位返回指针值的函数,简称指针函数。 - 指向函数的指针变量
类型说明符 (*变量名) ()
在C语言中,每个函数编译时都会被分配一段连续的内存空间和一个入口地址,这个入口地址就称为“指向函数的指针变量”或函数指针。
可以用一个变量来存储入口地址,称为“指向函数的指针变量”或函数指针变量。
例:计算一个整数的奇数和或偶数和
也可以用指向函数的指针变量做参数
同上例: