C:函数
总阅读次
函数
main函数的特殊之处在于执行程序的时候它自动被操作系统调用,做系统就认准了main这个名字。其返回值是给操作系统看的,通常程序执行成功就返回0,在执行过程中出错就返回一个非零值。
- 同一个函数可以被多次调用;
- 可以用一个函数调用第三个函数;
自定义函数
函数定义=返回值类型&bnsp;+函数名(参数列表) 函数体
函数原型
:声明了一个函数的**名字
**、参数类型、个数、返回值类型。
如:
1 | void threelines(void); |
这种写法只能叫**函数声明
而不能叫函数定义,只有带函数体
**的声明才叫函数定义,因为编译器只有见到函数体才能生成指令。
遵守**
先声明后使用
**
注意:
**声明
**把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。
**定义
**是指对函数功能的确立,包括指函数类型、函数名、函数体,他是一个完整的、独立的函数单位。
从程序中可以看到对函数的声明与函数定义中的函数首部基本上是相同的。因此可以简单地照写已定义的函数的首部,再加一个分号,就成为 了对函数的“声明”
在C语言中,函数声明称为函数原型*(function prototype)*。使用函数原型是ANSI C的一个重要特点。它的作用主要是利用它在程序的编译阶段对调用函数的合法性进行全面检查。
Tips;
- 如果调用函数时参数列表为空,并且缺少函数原型,则编译器根据根据隐式声明规则认为参数类型为void;
- 如果声明函数时参数列表为空,则这个声明属于Old Style C语法,不算函数原型,编译器认为参数类型和个数没有明确指出。
形参和实参
*1.
**局部变量:函数中定义变量称为局部变量lOCAL vARIABLE*
形参也是一种局部变量。
一个函数中的定义的变量不能被另一个函数使用
每次调用函数时局部变量都表示不同的存储空间。局部变量调用时才分配存储空间,每次函数返回时释放存储空间。
*2.
**全局变量Global Variable*:全局变量定义在所有的函数体外。
它们在程序开始运行时分配存储空间,在程序结束时释放存储空间。
在任何函数中都可以访问全局变量。
它的作用域是定义在所有函数体之外的标示符,从定义的位置开始知道源文件结束。而main函数的局部变量的作用域仅限于main函数之中。
3.
**全局变量只能用常量表达式
** Constant Expression来初始化。
例如:
1 | double pi=3014+0.0016; |
全局变量Pi这样初始化是合法的。
1 | double pi =acos(-1.0); |
然而局部变量这样初始化确实合法的。
这是因为在程序一开始运行*(还没有执行main函数中的任何语句之前)就要用初始化值来初始化全局变量。这样main函数的第一条语句就可以取全局变量的初始值来做计算*而acos
函数必须在调用它才能得到。
比如这样的初始化:
1 | int minute=360-10; |
把minute初始化成360-10是合法的编译器并不会生成一个系统指令来描述360-10的计算过程并把这些指令保存到可执行文件中,而是把计算结果350保存到可执行文件中。
但minute/60
不是常量表达式,不符合语法规定,所以编译器直接报错退出,而不去算这个初始值。
**4.**局部变量一定要在使用前先赋值。因为,局部变量在定义时不初始化则初始值是不确定的。
全局变量在定义是不初始化,则初始化值是0