谭浩强C-函数
一、函数的定义
1、无参函数
类型标示符 函数名() //括弧内参数空缺,若无返回值类型标示符写为void
{语句;..
}
2、有参函数
类型标示符 函数名(参数及其类型说明列表) //若无返回值类型标示符写为void
{语句;..
}
二、函数的参数及函数的值
1、形式参数为函数定义时括弧内的参数,作用域为定义函数体内。形式参数只有当函数被调用时才会给其分配存储地址。
2、实际参数为调用函数时括弧内的参数,须与函数定义时的形参数据类型一致。
3、函数调用时,一般情况下将实际参数的值单向传送给形式参数在定义函数体内使用,实际参数本身的值不变。当参数为数组类型时,函数调用时是将形式参数地址指向实际参数地址,若调用后形式参数值发生变化,则实际参数值也相应变化(因实际为同一存储地址)。
三、函数的调用
1、调用形式
函数类型符 函数名(实际参数表)
2、调用时的函数说明
(1)被调函数返回值为整型(不含长整型)或字符型时,可省去函数说明而直接调用。
(2)被调函数的函数定义在主调函数之前,可省去函数说明而直接调用。
(3)预说明:可在所有函数定义之前,在函数外部预先说明各函数类型,则可在主调函数中省去函数说明。
(4)调用库函数时候无须说明,但须在程序头部引用该库函数。
四、局部变量和全局变量
1、局部变量
(1)在某一函数内作定义,作用域为该函数体内。
(2)形式参数变量为属于被调函数的局部变量,实际参数变量为属于主调函数的局部变量。
(3)在不同函数中可使用相同变量名,因为作用域不同,不存在冲突。
(4)复合语句中的定义变量作用域只在复合语句体内。
2、全局变量
(1)在函数外部定义的变量,作用域为整个程序。
(2)在某一函数中使用全局变量,一般情况应先对全局变量予以说明:
void main() { int a=1; int sum; extern int b; //全局变量说明 sum=a+b; printf("sum=%d.\n",sum); } int b=5;
但在函数之前定义的全局变量,在函数内使用可不说明:(这点与调用函数说明类似)
int b=5; void main() { int a=1; int sum; extern int b; sum=a+b; printf("sum=%d\n",sum); }
(3)如果程序中,外部变量与局部变量同名,则在局部变量作用域内,该变量名为局部变量(指向局部变量的存储地址)。
五、变量的存储类别
1、C语言中每个变量和函数都有两个属性:数据类型及存储类型。
2、变量从作用域可分为全局变量和局部变量;从存在时间上可分为:静态存储方式和动态存储方式。
3、静态存储方式:程序运行期间分配固定的存储空间,存于静态存储区。程序中的全局变量即为静态存储方式。
4、动态存储方式:程序运行期间依据情况动态分配存储空间,存于动态存储区。函数中的局部变量即为动态存储方式(除非声明为static存储类别);局部变量用auto进行存储类别说明(可以省略auto声明)。
5、如果局部变量需要在程序中一直使用,则必须用static声明,如:static int a=1;在程序编译时即给该局部变量a分配静态存储地址,直至程序结束后才释放空间。
6、局部变量如果没有赋初值,如果为静态存储类型时,编译时候自动赋值0或空字符;如果为动态存储类型,则在函数运行时候仅分配动态存储空间,值不确定。