ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 函数 字符类型分类函数:用于对字符按ASCII码分类:字母,数字,控制字符,分隔符,大小写字母等。 转换函数:用于字符或字符串的转换;在字符量和各类数字量(整型,实型等)之间进行转换;在大、小写之间进行转换。 目录路径函数:用于文件目录和路径操作。 诊断函数:用于内部错误检测。 图形函数:用于屏幕管理和各种图形功能。 输入输出函数:用于完成输入输出功能。 接口函数:用于与操作系统、BIOS和硬件的接口。 字符串函数:用于字符串操作和处理。 内存管理函数:用于内存管理。 数学函数:用于数学函数计算。 日期和时间函数:用于日期,时间转换操作。 进程控制函数:用于进程管理和控制。 其它函数:用于其它各种功能。 以上各类函数不仅数量多,而且有的还需要硬件知识才会使用,因此要想全部掌握则需要一个较长的学习过程。应首先掌握一些最基本、最常用的函数,再逐步深入。更多的函数可根据需要查阅C语言函数手册。 还应该指出的是,在C语言中,所有的函数定义,包括主函数main在内,都是平行的。也就是说,在一个函数的函数体内,不能再定义另一个函数,即不能嵌套定义。但是函数之间允许相互调用,也允许嵌套调用。习惯上把调用者称为主调函数。函数还可以自己调用自己,称为递归调用。 main 函数是主函数,它可以调用其它函数,而不允许被其它函数调用。因此,C程序的执行总是从main函数开始,完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个C源程序必须有,也只能有一个主函数main。 当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身。所以在函数体内部可以改变实参的值。 ## 函数声明 如果一个函数在main函数后面写,那就要在main函数之前声明下 ~~~ extern int 函数名(形参列表); int main() { } ~~~ ## 自创函数 C语言提供了大量的库函数,比如stdio.h提供输出函数,但是还是满足不了我们开发中的一些逻辑,所以这个时候需要自己定义函数,自定义函数的一般形式: ~~~ [数据类型说明] 函数名称([参数]) { 执行代码块; return (表达式); } ~~~ 注意: 1、[]包含的内容可以省略,数据类型说明省略,默认是int类型函数;参数省略表示该函数是无参函数,参数不省略表示该函数是有参函数; 2、函数名称遵循标识符命名规范; 3、自定义函数尽量放在main函数之前,如果要放在main函数后面的话,需要在main函数之前先声明自定义函数,声明格式为:[数据类型说明] 函数名称([参数]); ## 返回值 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数返回类型为准,自动进行类型转换 注意:void函数中可以有执行代码块,但是不能有返回值,另void函数中如果有return语句,该语句只能起到结束函数运行的功能。其格式为:return; ## 内部函数与外部函数 在C语言中不能被其他源文件调用的函数称谓内部函数 ,内部函数由static关键字来定义,因此又被称谓静态函数,形式为: `static [数据类型] 函数名([参数]) ` 这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。 在C语言中能被其他源文件调用的函数称谓外部函数 ,外部函数由extern关键字来定义,形式为: `extern [数据类型] 函数名([参数]) ` C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略 ## system 执行外部程序,注意引入的头文件变了 ~~~ #include <stdlib.h> int main(int argc, char const *argv[]) { system("ls -l"); return 0; } ~~~ 我们想要知道引入那个头文件,就`man 3 printf`,或者`man 3 system` c语言所有的函数调用,只能保证语法是一致的,但是不能保证执行结果是一致的,同样的库函数在不同的操作系统下执行结果可能是一样的,也可能是不一样的 只要符合POSIX标准的函数,在不同系统下执行的结果就可以一致