C语言学习20260127

发布时间:2026/6/8 16:49:51

C语言学习20260127 函数分类库函数自定义函数库函数标准库和头文件标准库的概念C 标准库C Standard Library包含了一组头文件这些头文件提供了许多函数和宏用于处理输入输出、字符串操作、数学计算、内存管理等常见编程任务。C语言标准给出了一系列函数的实现这些函数就被称为库函数。我们前面内容中学到的printf、scanf都是库函数库函数也是函数不过这些函数已经是现成的我们只要学会就能直接使用了。有了库函数一些常见的功能就不需要程序员自己实现了一定程度提升了效率同时库函数的质量和执行效率上都更有保证。各种编译器的标准库中提供了一系列的库函数这些库函数根据功能的划分都在不同的头文件中进行了声明。库函数相关头文件C 标准库头部 - cppreference.com --- C Standard Library headers - cppreference.com库函数的使用方法库函数的学习和查看工具很多比如C官方的链接C 标准库头部 - cppreference.com --- C Standard Library headers - cppreference.comcplusplus.comC 库 - C 参考 --- C library - C Reference功能如Compute square root (计算平方根)。Returns the square root of x. (返回x的平方根)。头文件包含库函数是在标准库中对应的头文件中声明的所以库函数的使用务必包含对应的头文件不包含是可能会出现一些问题的。库函数文档的一般格式1. 函数原型2. 函数功能介绍3. 参数和返回类型说明4. 代码举例5. 代码输出6. 相关知识链接自定义函数自定义函数的必要性库函数再多都不能满足程序员的特殊需求。这时候我们就得自己定义函数。函数的语法形式其实自定义函数和库函数是一样的形式如下函数语法格式ret_type fun_name(形式参数){// 函数体}ret_type 是函数返回类型fun_name 是函数名括号中放的是形式参数{}括起来的是函数体函数定义/调用函数调用需要使用函数名(参数列表)的方式进行调用。函数调用过程当中参数的个数、数据类型、顺序均要匹配。函数调用过程当中返回值类型要匹配。#define _CRT_SECURE_NO_WARNINGS //函数的自定义/调用 #includestdio.h int xiangjia(int a , int b)//俩个数相加 { return a b; } int jiechen(int n)//阶乘 { int a 1; for (int i 1;in;i) { a a * i; } return a; } int main() { int w 1; int q 5; int c xiangjia(w,q);//函数的调用 int a jiechen(c); printf(%d, a); return 0; }函数声明#define _CRT_SECURE_NO_WARNINGS //函数的自定义/调用 #includestdio.h int main() { int w 1; int q 5; int c xiangjia(w,q);//函数的调用 int a jiechen(c); printf(%d, a); return 0; } int xiangjia(int a , int b)//俩个数相加 { return a b; } int jiechen(int n)//阶乘 { int a 1; for (int i 1;in;i) { a a * i; } return a; }编译警告warning C4013: xiangjiajiechen未定义假设外部返回 int原因C语言在编译的时候是自顶向下进行编译的。在编译到xiangjia,jiechen的时候编译器并没有看到xiangjia,jiechen函数的定义所以 就会出现警告。解决方案函数声明解决办法就是在main函数之前进行声明提前告知程序函数是存在的。#define _CRT_SECURE_NO_WARNINGS //函数的自定义/调用 #includestdio.h int xiangjia(int a,int b) int jiexhen(int n) int main() { int w 1; int q 5; int c xiangjia(w,q);//函数的调用 int a jiechen(c); printf(%d, a); return 0; } int xiangjia(int a , int b)//俩个数相加 { return a b; } int jiechen(int n)//阶乘 { int a 1; for (int i 1;in;i) { a a * i; } return a; }建议我们一般建议把main函数写到最后因为只要多一步操作就有一次错误的风险实参和形参实参的定义实参即实际参数是在调用函数时传递给函数的真实值。它可以是常量、变量、表达式或函数返回值。形参的定义形参即形式参数是在定义函数时函数名后面括号中的变量。它作为函数内部的局部变量用于接收调用时传入的实参值。实参和形参的关系参数传递机制值传递在目前的知识储备之下我们可以理解为形参和实参是2个不同的内存空间。函数调用时实参把值传递给了形参形参是实参的一份临时拷贝。重要提示因为形参只是实参的拷贝所以在函数内部修改形参的值无法影响到main函数中的实参。要解决这个问题我们得引入指针。验证示例尝试交换2个数例////交换2个数 #includestdio.h int huan(int a,int b) { int tmp a; a b; b tmp; return a,b; } int main() { int a 0; printf(a); scanf_s(%d, a); int b 0; printf(b); scanf_s(%d,b); printf(交换后\n); huan(a, b); printf(a%d\nb%d,a,b); return 0; }嵌套调用和链式访问#define _CRT_SECURE_NO_WARNINGS //嵌套调用 #includestdio.h int xiangjia(int a , int b)//俩个数相加 { return a b; } int jiechen(int n)//阶乘 { int a 1; for (int i 1;in;i) { a a * i; } return a; } int main() { int w 1; int q 5; int c xiangjia(w,q);//函数的调用 int a jiechen(c); printf(%d, a); return 0; }#define _CRT_SECURE_NO_WARNINGS #include stdio.h int fac(int n) { int ret 1; for (int i 1; i n; i) { ret * i;// 阶乘 } return ret; } int my_pow(int n) { return n * n;// 平方 } int main() { int n 0; scanf_s(%d, n); int ret my_pow(fac(n));// 链式访问 printf(阶乘%d\n, fac(n)); printf(阶乘的平方%d\n, ret); return 0; }static和externstatic 和 extern 都是C语言中的关键字。static静态的修饰局部变量修饰全局变量修饰函数extem外部的extem用于声明一个在其他文件中定义的全局变量或函数。前置知识作用域与生命周期作用域 是程序设计概念通常来说一段程序代码中所用到的名字并不总是有效可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。局部变量的作用域变量所在的局部范围如函数内部。全局变量的作用域整个工程项目。生命周期 指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段。局部变量的生命周期进入作用域变量创建生命周期开始出作用域生命周期结束。全局变量的生命周期与整个程序的生命周期相同。static修饰局部变量改变了变量的生命周期生命周期改变的本质是改变了变量的存储类型本来一个局部变量是存储在内存的栈区的但是被static修饰后存储到了静态区。存储在静态区的变量和全局变量是一样的生命周期就和程序的生命周期一样了只有程序结束变量才销毁内存才回收。但是作用域不变的。回顾一下C语言学习记录20260119-CSDN博客使用建议未来一个变量出了函数后我们还想保留值等下次进入函数继续使用就可以使用static修饰。extern是用来声明外部符号的如果一个全局的符号在A文件中定义的在B文件中想使用就可以使用extern进行声明然后使用。一个全局变量被static修饰使得这个全局变量只能在本源文件内使用不能在其他源文件内使用。本质原因是全局变量默认是具有外部链接属性的在外部的文件中想使用只要适当的声明就可以使用但是全局变量被static修饰之后外部链接属性就变成了内部链接属性只能在自己所在的源文件内部使用了其他源文件即使声明了也是无法正常使用的。使用建议如果一个全局变量只想在它所在的源文件内部使用不想被其他文件意外地访问或修改就可以使用static修饰。其实static修饰函数和static修饰全局变量是一模一样的一个函数在整个工程都可以使用被static修饰后只能在本文件内部使用其他文件无法正常的链接使用了。本质是因为函数默认是具有外部链接属性具有外部链接属性使得函数在整个工程中只要适当的声明就可以被使用。但是被static修饰后变成了内部链接属性使得函数只能在自己所在源文件内部使用。使用建议一个函数只想在所在的源文件内部使用不想被其他源文件使用就可以使用static修饰。多文件下的代码书写如果在涉及多文件下的代码书写时我们可以新建一个.c文件把代码放进去使用的时候可以通过extem关键字进行声明但是如果是多个函数我们就可以使用头文件为了解决多个 extern 声明带来的管理问题我们可以使用头文件.h 文件来统一管理所有外部函数的声明。使用尖括号引入头文件和使用双引号引入头文件的区别是什么主要区别在于编译器搜索头文件的路径和顺序不同一、使用双引号时编译器会按照以下顺序查找头文件1. 当前目录首先在包含此#include指令的源文件所在的目录中查找。2. 系统目录如果在当前目录中没有找到该文件编译器会接着到系统指定的标准包含目录中查找这个过程和使用尖括号一样。3. 使用场景通常用于包含项目自定义的头文件。因为这些头文件通常与源文件存放在同一个项目目录或其子目录中。二、使用尖括号时编译器只会在系统指定的标准包含目录中查找头文件。它不会在源文件所在的当前目录中查找。这些标准目录通常包括1.编译器安装时自带的头文件目录例如/usr/include。2.Windows上安装的目录比如我们可以找到stdio.h的所在的目录。(具体方法可以右键代码中的stdio.h打开该文件从而打开文件所在目录)3.使用场景通常用于包含C标准库头文件或外部库的头文件。以上就是此次学习的内容记录如果我在此次学习记录中有疏忽的地方请您批评指出我下次会继续努力期待您的批评和建议

相关新闻