"从用户使用的角度看,C语言中的函数分为标准函数(库函数)和用户自定义函数。标准函数由系统提供,用户可以直接使用,不同C系统提供的库函数可能存在差异,但基本函数通常是通用的。用户自定义函数则是根据特定需求编写的,用于解决特定问题。本章内容涵盖函数的概念、定义、调用、递归调用、变量作用域、函数作用域、数组作为函数参数、局部变量和全局变量、存储类别以及内部函数和外部函数等。通过示例展示了如何声明和调用函数,以及如何组织函数间的调用关系。"
在C语言程序设计中,函数是代码组织的基本单元,它封装了一段具有特定功能的代码,便于重复使用和模块化编程。从用户使用的角度来看,函数主要分为两类:
1. **标准函数/库函数**:这些是由系统提供的,如`printf`、`scanf`等,它们包含在头文件中,用户无需编写,可以直接在程序中调用。不同C编译环境可能提供的库函数有所差异,但核心的库函数,如输入输出、数学运算、字符串处理等功能是通用的。
2. **用户自定义函数**:用户可以根据自己的需求定义函数,以解决特定问题。自定义函数增强了代码的灵活性和可复用性,使得程序结构更清晰,易于维护。
在C语言中,函数的使用涉及以下几个关键点:
- **函数定义与调用**:函数定义通常包括返回类型、函数名、参数列表,如`void printstar()`。调用函数则通过函数名加上括号,如`printstar();`,将控制权转移给被调用的函数。
- **函数的递归调用**:函数可以调用自身,形成递归,用于解决需要重复执行相同任务的问题,但需要注意避免无限递归导致栈溢出。
- **变量的作用域**:变量的可见性和生命周期,分为局部变量(仅在定义它的函数或代码块内有效)和全局变量(在整个程序中有效)。局部变量在函数调用结束后通常会被销毁,而全局变量在整个程序期间保持其值。
- **函数的作用域**:函数可以访问在其定义范围内的变量,如果一个函数想要访问另一个函数的局部变量,需要考虑变量的作用域规则和存储类别。
- **数组作为函数参数**:数组可以作为函数的参数传递,但实际传递的是数组的首地址,而非整个数组。
- **存储类别**:C语言中的存储类别包括自动(局部变量)、静态(全局变量和局部静态变量)、寄存器(尝试将变量存储在CPU寄存器中)和外部(全局变量,可被其他文件访问)。
- **内部函数和外部函数**:内部函数(static修饰的函数)只在其定义的源文件内可见,外部函数可以在整个项目中被调用。
通过以上知识点的学习,开发者能够更好地理解和使用C语言中的函数,创建高效、可维护的程序。例如,在例8.1中,`main`函数声明并调用了两个用户自定义函数`printstar`和`print_message`,分别打印星号和问候语,展示了函数调用的基本流程。