函数

常用算数函数<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也可以省略。

posted @ 2018-01-30 21:24  Limulus  阅读(195)  评论(0)    收藏  举报