函数
常用算数函数<math.h>
|
函数名 |
函数式 |
|
根号 |
sqrt() |
|
绝对值 |
fabs() |
|
三角函数 |
sin()、cos()、tan() |
|
反三角函数 |
asin()、acos()、atan() |
|
指数 |
pow(x,y) |
pow()原型为float,剩余几个函数原型都是double,其他类型也能计算,但整形的话容易出错。
函数声明
函数写在前面可以不写函数声明,函数写在后面要写函数声明。
函数声明可以不写参数名,只写参数类型。
eg:float add(float,float);与float add(float a,float b);都可以。
数组参数
一维数组作函数参数:
C语言允许用指针变量(如float *array)或数组(如float array[])作为形参,二者是等价的。形参数组既可以指定数组长度也可以不指定。
eg:float average(float array[],int n);
float average(float *array,int n);
float average(float array[10],int n);
多维数组作函数参数:
(1)多位数组名作为函数的形参,在定义时可以指定每一维的大小,也可以省略第一维的大小说明,但不能省略第2维以及其他高维的大小说明。
eg:int array[3][10];和int array[][10];等价
但int array[][]和int array[3][]是不合法的。
(2)C语言编译系统不检查第一维的大小。在第2维大小相同的前提下,形参数组的第一维可以与实参数组不同。
eg:实参数组定义为:int score[5][10];而形参数组定义为int array[][10]或者int array[8][10]均可以。
局部变量与全局变量
(1)在一个函数内部定义的变量只在本函数范围内有效;
(2)在一个复合语句(一个“{}”内的语句)内定义的变量只在本复合语句内有效,这种复合语句也成为“分程序”或“程序块”。
(3)在函数之外定义的变量称为全局变量(也称全程变量),它的有效范围从定义变量的位置开始到本源文件结束。(跟局部变量定义相同,不是#define)
(4)为区分全局变量与局部变量,全局变量第一个字母习惯用大写(但非规定)。
(5)非必要时不使用全局变量。
(6)当全局变量与局部变量同名时,在局部变量作用范围内全局变量被“屏蔽”。
局部变量存储类别
自动变量(auto变量)
函数中的形参和在函数中定义的局部变量(包括在复合语句中定义的局部变量),如果不专门声明为static(静态)存储类别,都是动态地分配存储空间。在调用该函数时,系统会给这些变量分配存储空间,在函数调用结束时就自动释放这些存储空间。自动变量用关键字auto作为存储类别的声明,可以省略。
静态局部变量(static局部变量)
(1)静态局部变量在函数调用结束后不消失而保留原值,在下一次再调用该函数时,该变量的值为上一次函数调用结束时的值。
(2)如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动复制0(对数值型变量)或空字符‘\0’(对字符变量)。而对自动变量来说,它的值是不确定的,因为每次调用重新分配存储空间,分配的单元中的内容是不可知的。
(3)虽然静态局部变量在调用结束后仍然存在,但其他函数是不能引用它的。
寄存器变量(register变量)
寄存器变量是为了提高存取使用频繁的变量的速度,现在优化的编译系统能够识别使用频繁的变量,从而自动放在寄存器,因此用register声明变量的必要性不大。
全局变量存储类别
在一个文件内扩展外部变量的作用域
(1)如果外部变量不在文件的开头定义,其有效范围只限于定义处到文件结束。在定义点之前的函数不能引用该外部变量。若是要在定义点之前的函数引用该局部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”表示把该外部变量的作用域扩展到此位置。
(2)用extern声明外部变量时,类型名可以写也可以省写。
将外部变量的作用域扩展到其他文件
在任一个文件中定义外部变量Num,在另一文件中用extern对Num作“外部变量声明”,即“extern Num”,则两个文件都能使用外部变量Num。
将外部变量的作用域限制在本文件中
在定义外部变量时加一个static声明(eg:static int A;),即静态外部变量。这样的话,其他文件即时使用extern进行对A外部变量声明也无法使用这个文件中的外部变量A。
内部函数和外部函数
内部函数又称静态函数,用static声明。内部函数的作用域只局限于所在文件,提高了可靠性,eg:static int fun(int a,int b)。
外部函数用extern声明,可以被其他文件调用,eg:extern int fun(int a,int b),extern可以省略,在调用此函数时需要用extern对此函数作声明,extern也可以省略。

浙公网安备 33010602011771号