在C语言中,函数是代码组织的基本单位,用于封装特定任务的执行逻辑。第八章主要讲解了关于函数的多个方面:
1. **概述**:函数是C语言中复用代码和模块化编程的关键元素,它允许我们将代码分成独立的、可重复使用的部分。
2. **函数定义的一般形式**:函数定义通常包括返回类型、函数名、参数列表和函数体。例如:`return_type function_name(parameters) { body_of_function }`
3. **函数参数和函数的值**:参数是在调用函数时传递给函数的数据,函数可以修改这些参数或根据它们进行计算。函数可以返回一个值,通过`return`语句实现。
4. **函数的调用**:通过函数名和括号内的参数列表来调用函数,例如:`function_name(expression_list)`。
5. **函数的嵌套调用**:一个函数可以在另一个函数内部被调用,形成嵌套结构。
6. **函数的递归调用**:函数可以调用自身,但必须有一个明确的停止条件,否则会导致无限递归。
7. **数组作为函数参数**:函数可以接收数组作为参数,实际上传递的是数组的首地址。因此,函数可以对数组进行操作。
8. **局部变量和全局变量**:
- **局部变量**:在函数内部声明,仅在该函数内部可见和有效。它们在函数调用结束后被销毁。`auto`是局部变量的默认存储类别,`register`试图将变量存储在寄存器中以提高速度,`static`使得局部变量在整个程序执行期间保持其值。
- **全局变量**:在所有函数之外声明,整个程序或特定文件范围内都可见。全局变量在整个程序执行过程中持续存在,其值在函数调用之间保持不变。全局变量在使用时应谨慎,因为它们可能导致数据冲突和难以调试的问题。
9. **变量的存储类别**:除了`auto`和`extern`,还有`static`和`register`。`extern`用来在其他文件中声明全局变量,`static`用于在函数内部创建持久的局部变量或限制全局变量的作用域。
10. **内部函数和外部函数**:内部函数(static修饰的函数)只能在当前源文件中使用,外部函数可以被其他文件调用。
在示例中,我们看到局部变量如`a, b, c, m, n`只在各自的函数或复合语句中有效,而全局变量如`p, q, c1, c2`在整个源文件中都是可见的。在函数`sub`中,局部变量`a, b`的改变不会影响`main`中的同名全局变量。在复合语句中定义的`temp`变量只在其所在的花括号内有效。
全局变量虽然可以方便函数间共享数据,但容易引发命名冲突和难以追踪的数据依赖,因此一般推荐优先使用局部变量,并通过参数传递数据。在编写C程序时,应遵循良好的编程习惯,避免过度使用全局变量,以提高代码的可读性和可维护性。