函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)
一、函数的概念
•C语⾔中的函数:⼀个完成某项特定的任务的⼀⼩段代码
•函数又被翻译为子函数(更准确)
•在C语⾔中我们⼀般会⻅到两类函数:库函数 ⾃定义函数
二、库函数
1 .标准库和头文件
•C语⾔的国际标准ANSIC规定了⼀些常⽤的函数的标准,被称为标准库,那不同的编译器⼚商根据ANSI提供的C语⾔标准就给出了⼀系列函数的实现,这些函数就被称为库函数
•库函数相关头文件:https://zh.cppreference.com/w/c/header
2.库函数的使用方法
(1)库函数学系工具链接
•C/C++官方的链接:https://zh.cppreference.com/w/c/header
•cplusplus.com:https://legacy.cplusplus.com/reference/clibrary/
(2)库函数使用顺序
•包含头文件:头文件中声明了库函数的原型,告诉编译器函数的名称、返回类型和参数类型
•调用函数:调用函数时,需要按照函数的原型提供正确的参数,并根据需要处理返回值
注意事项:
• 参数类型和数量:调用函数时,确保提供的参数类型和数量与函数原型一致
• 库函数的限制:了解库函数的使用限制和前提条件,某些函数对输入参数有特定的要求
(3)举例库函数 sprt
• 库函数sprt的功能:Compute square root(计算平方根) 和Returns the square root of x(返回平⽅根)
• sqrt的头文件是math.h

#include <stdio.h>//scanf printf的头文件
#include <math.h>//sqrt 的头文件
int main()
{double n,r;scanf("%lf", &n);r = sqrt(n);//调用函数printf("%lf", r);return 0;
}

三、自定义函数
1.自定义函数的语法形式
return_type fun_name(形式参数)
{}
•return_type:是⽤来表⽰函数计算结果的类型(int float double char…),返回类型可以是void,表示什么都不返回
•fun_name:是函数名,函数名尽量要根据函数的功能起
•形式参数:函数的参数也可以是void,明确表⽰函数没有参数。如果有参数,要交代清楚参数的类型和名字,以及参数个数
•{}:括起来的是函数体
2.自定义函数简单举例
写⼀个除法函数,完成2个浮点型变量的除法法操作
#include <stdio.h>
double Division(double x, double y)
{double z = x / y;return z;
}
int main()
{double a, b, result;scanf("%lf %lf", &a, &b);//输入result = Division(a, b);//调用除法函数,完成a和b相除//求商的结果放在result中printf("%lf\n", result);//输出return 0;
}
Division函数可以简化为:
double Division(double x, double y)
{return x / y;
}

注意:
•函数的参数部分需要交代清楚:参数个数,每个参数的类型是什么,形参的名字是什么
上⾯只是⼀个例⼦,未来我们是根据实际需要来设计函数,函数名、参数、返回类型都是可以灵活变化的
四、形参和实参
以上面的代码为例
#include <stdio.h>
double Division(double x, double y)
{double z = x / y;return z;
}
int main()
{double a, b, result;scanf("%lf %lf", &a, &b);//输入result = Division(a, b);//调用除法函数,完成a和b相除//求商的结果放在result中printf("%lf\n", result);//输出return 0;
}
1.实参
result = Division(a, b);
•调⽤Division函数时,传递给函数的参数a和b,称为实际参数,简称实参
•实际参数就是真实传递给函数的参数
2.形参
double Division(double x, double y)
•函数名Division后的括号中写的x和y,称为形式参数,简称形参
•如果只是定义了Division函数,⽽不去调⽤的话, Add 函数的参数x和y只是形式上存在,不会向内存申请空间,所以叫形式参数。形式参数只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程是形参的实例化
3.形参和实参的关系
•形参和实参各⾃是独⽴的内存空间

x和y确实得到了a和b的值,但是x和y的地址和a和b的地址是不⼀样的,所以我们可以理解为形参是实参的⼀份临时拷⻉
五、return语句
运用return的注意事项:
1.函数中有可能出现return,也可能没有
void menu()//无需返回任何类型的函数
{~~~~~~~
}
2.return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执⾏表达式,再返回表达式的结果
例子:写一个函数,判断一个整数是奇数是偶数,是偶数返回0,是奇数返回1
return 后面是数值
#include <stdio.h>
int judge(int x)
{if (x % 2 == 0){return 0;//数值}if (x % 2 == 1){return 1;//数值}
}
int main()
{int n = 0;scanf("%d", &n);int ret = judge(n);if (ret == 1){printf("奇数");}if(ret == 0){printf("偶数");}return 0;
}
return 后面是表达式
#include <stdio.h>
int judge(int x)
{return x % 2;//表达式
}
结果都可以正确判断奇偶

3.return后边也可以什么都没有,直接写return; 这种写法适合函数返回类型是void的情况
•return;适合:一个函数在执行的过程,遇到某个条件需要提前返回,但是不需要带回任何值的情况
4.return语句执⾏后,函数就彻底返回,后边的代码不再执⾏
例子:输入一个数,如果是偶数输出I LOVE A和I LOVE B,如果是奇数输出I LOVE A
#include <stdio.h>
void test(int x)
{printf("I LOVE A\n");if (x % 2 == 1){return;//输入的是奇数直接返回,下面的语句不会执行}printf("I LOVE B\n");
}
int main()
{int n = 0;scanf("%d", &n);test(n);return 0;
}
结果:


5.return返回的值和函数返回类型不⼀致,系统会⾃动将返回的值转换为函数的返回类型
举例:
#include <stdio.h>
int test()//函数的返回类型是整型
{return 3.5;// 需要返回的数字是浮点型,// return的返回类型与函数的不同,// 系统会⾃动将return返回的值转换为函数的返回类型// return返回的值为3
}
int main()
{double r = test();printf("%.1f", r);//输出一位小数,3.0
}

6.如果函数中存在if等分⽀的语句,则要保证每种情况下都有return返回,否则会出现编译错误
举例:
#include <stdio.h>
double test(double x)
{if (x == 1){return 3.5;// n!=1的时候,有些编译器的函数返回值是不可预测的}
}
int main()
{double n = 0;scanf("%lf", &n);double r = test(n);printf("%.1f", r);return 0;
}
编译器会报错

7.函数的返回类型如果不写,编译器会默认函数的返回类型是int
举例:
#include <stdio.h>
test()//函数无返回类型,默认返回类型是int
{return 3.5;//返回的是浮点型
}
int main()
{double r = test();//函数真正值是3printf("%.1f", r);//输出一位小数,3.0
}
结果:

8.函数写了返回类型,但是函数中没有使⽤return返回值,那么函数的返回值是未知的
举例:
#include <stdio.h>
int test()
{//没有return
}
int main()
{int r = test();printf("%d", r);
}
结果:

六、数组做函数参数
数组传参的⼏个重点知识:
• 函数的形式参数要和函数的实参个数匹配
• 函数的实参是数组,形参也是可以写成数组形式的
• 形参如果是一维数组,数组大小可以省略不写
• 形参如果是二维数组,行可以省略,但 是列不能省略
• 数组传参,形参是不会创建新的数组的
• 形参操作的数组和实参的数组是同一个数组
举例:写两个函数,一个函数设置数组的值,一个负责输出函数的值
#include <stdio.h>
void set_arr(int arr[], int sz)//设置对应的形参
{int i = 0;for (i = 0; i < sz; i++){arr[i] = i;//设置arr数组的值0~9}
}void printf_arr(int arr[], int sz)//设置对应的形参{int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);//输出arr数组的值0~9}
}
int main()
{ int arr[10] = { 0 };//计算数组的元素个数int sz = sizeof(arr) / sizeof(arr[1]);//设置数组的值set_arr(arr,sz);//传入arr数组和数组的元素个数//书橱数组的值、printf_arr(arr, sz);//传入arr数组和数组的元素个数return 0;
}
结果:

七、嵌套调用和链式访问
1.嵌套调用
嵌套调用就是在函数中调用其他函数
举例:计算某年某月有多少天
逻辑:
1.每个月的天数通常是固定的,除了二月份:
• 一月(1月):31天
• 二月(2月):28天或29天(闰年)
• 三月(3月):31天
• 四月(4月):30天
• 五月(5月):31天
• 六月(6月):30天
• 七月(7月):31天
• 八月(8月):31天
• 九月(9月):30天
• 十月(10月):31天
• 十一月(11月):30天
• 十二月(12月):31天
2. 判断闰年对于二月份,需要判断该年是否为闰年
3. 闰年的判断规则是:年份能被4整除,但不能被100整除,或者能被400整除
4. 计算天数根据月份和是否为闰年,返回相应的天数:
• 如果是二月份且是闰年,则返回29天
• 如果是二月份但不是闰年,则返回28天
• 对于其他月份,直接返回固定的天数(31天或30天)
#include <stdio.h>//判断闰年
int is_LeapYear(int year)
{if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){return 29;}else{return 28;}
}//判断有多少天
int day_In_month(int year, int month)
{switch (month){//有31天的月份{case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;}//有30天的月份{case 4:case 6:case 9:case 11:return 30;}//二月:28天或29天(闰年)case 2:{return is_LeapYear(year);//判断闰年}}
}
int main()
{int year, month, day;regain1:printf("请输入你要查询的年和月:");regain2:while (scanf("%d %d", &year, &month) != EOF){//判断年月输入是否正确if (year < 0 || month <= 0 || month>12){if (year < 0 && (month > 0 && month <= 12)){printf("年份输入错误,请输 (year>=0)的数\n请重新输入你要查询的年和月:");goto regain2;}if (year >= 0 && (month <= 0 || month > 12)){printf("月份输入错误,请输入(month>0 && month<=12)的数\n请重新输入你要查询的年和月:");goto regain2;}if (year < 0 && (month <= 0 || month > 12)){printf("年份和月份输入错误,请输入(year>=0 && month>0 && month<=12)的数\n请重新输入你要查询的年和月:");goto regain2;}}day = day_In_month(year, month);printf("%d年%d月有%d天\n", year, month, day);goto regain1;}return 0;
}
• main 函数调⽤ scanf 、 printf day_In_month
• day_In_month 函数调⽤ is_LeapYear
2.链式访问
链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数
例子:printf的返回值
•printf函数返回的是打印在屏幕上的字符的个数
•printf的详细内容(https://blog.csdn.net/Siri_s12/article/details/144370792?spm=1001.2014.3001.5501)
#include <stdio.h>
int main()
{printf("%d", printf("%d", printf("%d", 43)));return 0;
}
•第三个printf打印43,在屏幕上打印2个字符,再返回2
•第⼆个printf打印2,在屏幕上打印1个字符,再放回1
•第⼀个printf打印1
所以屏幕上最终打印:4321
八、函数的声明和定义
1.单个文件
函数的定义(实现函数功能的代码)
//判断闰年
int is_LeapYear(int year)
{if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){return 29;}else{return 28;}
}
函数的调用(运用函数的地方)
比如这里的 return is_LeapYear(year);
//二月:28天或29天(闰年)case 2:{return is_LeapYear(year);//判断闰年}
•如果函数的定义在函数的调用之后,编译时就会有报错,把怎么解决这个问题呢?就是函数调⽤之前先声明函数,声明函数只要交代清楚:函数名,函数的返回类型和函数的参数,比如int is_LeapYear(int year);
#include <stdio.h>int is_leap_year(int y);//函数声明int main()
{int y = 0;scanf("%d", &y);int r = is_leap_year(y);if (r == 1)printf("闰年\n");elseprintf("⾮闰年\n");return 0;
}
//判断是不是闰年
int is_leap_year(int y)
{if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))return 1;elsereturn 0;
}
•函数的调⽤⼀定要满⾜,先声明后使⽤;
•函数的定义也是⼀种特殊的声明,所以如果函数定义放在调⽤之前也是可以的
2.多个文件
函数的声明、类型的声明放在头⽂件(.h)中,函数的实现是放在源⽂件(.c)⽂件中
比如:
add.c
//函数的定义
int is_LeapYear(int year)
{if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){return 29;}else{return 28;}
}int day_In_month(int year, int month)
{switch (month){//有31天的月份{case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;}//有30天的月份{case 4:case 6:case 9:case 11:return 30;}//二月:28天或29天(闰年)case 2:{return is_LeapYear(year);//判断闰年}}
}
add.h
//函数的声明
int is_LeapYear(int year);
int day_In_month(int year, int month);
test.c
#include <stdio.h>
#include "add.h"
int main()
{int year, month, day;regain1:printf("请输入你要查询的年和月:");regain2:while (scanf("%d %d", &year, &month) != EOF){//判断年月输入是否正确if (year < 0 || month <= 0 || month>12){if (year < 0 && (month > 0 && month <= 12)){printf("年份输入错误,请输 (year>=0)的数\n请重新输入你要查询的年和月:");goto regain2;}if (year >= 0 && (month <= 0 || month > 12)){printf("月份输入错误,请输入(month>0 && month<=12)的数\n请重新输入你要查询的年和月:");goto regain2;}if (year < 0 && (month <= 0 || month > 12)){printf("年份和月份输入错误,请输入(year>=0 && month>0 && month<=12)的数\n请重新输入你要查询的年和月:");goto regain2;}}day = day_In_month(year, month);printf("%d年%d月有%d天\n", year, month, day);goto regain1;}return 0;
}
3.static和extern
(1)作用域
• 定义:在C语言中,作用域(Scope)指的是一个标识符(如变量名、函数名等)有效、可被访问的区域,通俗来说,一个变量在哪里可以使用,哪里就是它的作用域
•局部变量的作⽤域是变量所在的局部范围

这个代码中,a的作用域在
{int a = 0;printf("%d", a);
}
•全局变量的作⽤域是整个⼯程(项⽬)

int a = 10所有函数内都可以使用
(2)生命周期
•⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段
•局部变量的⽣命周期是:进⼊作⽤域变量创建,⽣命周期开始,出作⽤域⽣命周期结束
•全局变量的⽣命周期是:整个程序的⽣命周期
(3)static和extern
static 是静态的的意思,可以⽤来:
• 修饰局部变量
• 修饰全局变量
• 修饰函数
extern 用来声明外部符号

(a)static修饰局部变量
对比两个函数的结果


代码1的test函数中的局部变量a是每次进⼊test函数先创建变量(⽣命周期开始)并赋值为0,然后a++,再打印,出函数的时候变量⽣命周期将要结束(释放内存)
代码2中,我们从输出结果来看,a的值有累加的效果,其实 test函数中的a创建好后,出函数的时候是不会销毁的,重新进⼊函数也就不会重新创建变量,直接上次累积的数值继续计算
结论:
static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本来⼀个局部变量是存储在内存的栈区的,但是被static修饰后存储到了静态区。存储在静态区的变量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才回收。但是作⽤域不变的
使⽤建议:
⼀个变量出了函数后,还想保留值,等下次进⼊函数继续使⽤,就可以使⽤static修饰
(b) static 修饰全局变量
int a = 100;没有static修饰,可以跨文件正常使用

int a = 100;有static修饰,不可以跨文件正常使用

结论:
⼀个全局变量被static修饰,使得这个全局变量只能在本源⽂件内使⽤,不能在其他源⽂件内使⽤。 本质原因是全局变量默认是具有外部链接属性的,在外部的⽂件中想使⽤,只要适当的声明就可以使⽤;但是全局变量被 static 修饰之后,外部链接属性就变成了内部链接属性,只能在⾃⼰所在的源⽂件内部使⽤了,其他源⽂件,即使声明了,也是⽆法正常使⽤的
使⽤建议:
如果⼀个全局变量,只想在所在的源⽂件内部使⽤,不想被其他⽂件发现,就可以使⽤static修饰。
(c)static 修饰函数
Add函数没有static修饰,Add函数可以使用

Add函数有static修饰,Add函数不可以使用

结论:
static 修饰函数和 static 修饰全局变量是⼀模⼀样的,⼀个函数在整个⼯程都可以使⽤,被static修饰后,只能在本⽂件内部使⽤,其他⽂件⽆法正常的链接使⽤了
使⽤建议:
⼀个函数只想在所在的源⽂件内部使⽤,不想被其他源⽂件使⽤,就可以使⽤ static 修饰
相关文章:
函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)
一、函数的概念 •C语⾔中的函数:⼀个完成某项特定的任务的⼀⼩段代码 •函数又被翻译为子函数(更准确) •在C语⾔中我们⼀般会⻅到两类函数:库函数 ⾃定义函数 二、库函数 1 .标准库和头文件 •C语⾔的国际标准ANSIC规定了⼀…...
物联网在烟草行业的应用
物联网技术在烟草行业的应用 物联网技术在烟草行业的应用主要体现在以下几个方面: 智能制造 :物联网技术可以实现对生产过程中的关键参数进行实时监测,确保产品的质量稳定可靠。同时,通过对设备的远程维护和故障诊断,…...
第6章:Python TDD实例变量私有化探索
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
Java操作Excel导入导出——POI、Hutool、EasyExcel
目录 一、POI导入导出 1.数据库导出为Excel文件 2.将Excel文件导入到数据库中 二、Hutool导入导出 1.数据库导出为Excel文件——属性名是列名 2.数据库导出为Excel文件——列名起别名 3.从Excel文件导入数据到数据库——属性名是列名 4.从Excel文件导入数据到数据库…...
BUUCTF_Web([GYCTF2020]Ezsqli)
1.输入1 ,正常回显。 2.输入1 ,报错false,为字符型注入,单引号闭合。 原因: https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段,回显位置,数据库,都是这个。…...
微软宣布Win11 24H2进入新阶段!设备将自动下载更新
快科技1月19日消息,微软于1月16日更新了支持文档,宣布Windows 11 24H2进入新阶段。 24H2更新于2024年10月1日发布,此前为可选升级,如今微软开始在兼容的Windows 11设备上自动下载并安装24H2版本。 微软表示:“运行Wi…...
SpringBoot:解决前后端请求跨域问题(详细教程)
文章目录 一、前言二、解决方式 2.1 使用 CrossOrigin 注解(简单方便,适用于单个或少量接口)2.2 全局配置跨域(适用于整个项目中大量接口都需要跨域的情况)2.3 使用过滤器来处理跨域(更底层的实现方式&…...
Android-V lmkd 中的那些属性值
源码基于:Android V 相关博文: Android lmkd 机制详解(一) Android lmkd 机制详解(二) Android lmkd 机制从R到T 1. 汇总 属性名说明默认值 ro.lmk.debug 启动 lmkd 的debug 模式,会打印一…...
PageHelper快速使用
依赖 <!--分页插件PageHelper--> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version> </dependency>示例 /** * 封装分页结果…...
图像处理基础(3):均值滤波器及其变种
均值滤波器可以归为低通滤波器,是一种线性滤波器,其输出为邻域模板内的像素的简单平均值,主要用于图像的模糊和降噪。 均值滤波器的概念非常的直观,使用滤波器窗口内的像素的平均灰度值代替图像中的像素值,这样的结果就…...
力扣刷题心得_JAVA
数学 > 数组 > 链表 > 字符串 > 哈希表 > 双指针 > 递归 > 栈 > 队列 > 树 //一般力扣中传入的参数和新建的对象作为返回值,都不列入空间复杂度中 //但是面试的时候要和面试官商量好,灵活定义空间复杂度 //当然最好是就在传入的对象作为返回值,(在原…...
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码(一)HTML代码(二)css代码 二、登录页面(一)HTML代码(二)css代码…...
Unity编辑器缩放设置
Unity默认界面UI字体太小了,可以设置一下缩放 打开首选项, UI Scaling 设置成125%或者更大 ,然后重启...
ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT
文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史:从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …...
Golang学习笔记_27——单例模式
Golang学习笔记_24——泛型 Golang学习笔记_25——协程Golang学习笔记_25——协程 Golang学习笔记_26——通道 文章目录 单例模式1. 介绍2. 应用场景3. 实现3.1 饿汉式3.2 懒汉模式 源码 单例模式 1. 介绍 单例模式是一种创建型设计模式,它确保一个类只有一个实例…...
хорошо哈拉少wordpress俄语主题
хорошо哈拉少wordpress俄语主题 wordpress俄文网站模板,推荐做俄罗斯市场的外贸公司建俄语独立站使用。 演示 https://www.jianzhanpress.com/?p7360...
[数据结构与算法]js实现二叉树
DFS 与 BFS dfs 递归 本质通过栈结构 bfs 层序遍历 通过队列结构 function permute(nums) {let res [];let cur []; // 记录当前内容let visted {}; //记录访问过的节点let len nums.length;function dfs(nth) {//递归终止条件if (nth len) {res.push([...cur]);return …...
MySQL程序之:连接到服务器的命令选项
本节介绍大多数MySQL客户端程序支持的选项,这些选项控制客户端程序如何建立与服务器的连接、连接是否加密以及连接是否压缩。这些选项可以在命令行或选项文件中给出。 连接建立的命令选项 本节介绍控制客户端程序如何建立与服务器的连接的选项。 表6.4连接建立选…...
python3GUI--仿崩坏三二次元登录页面(附下载地址) By:PyQt5
文章目录 一.前言二.预览三.实现方案1.实现原理1.PyQt52. 具体实现 2.UI设计1.UI组件化、模块化2.UI设计风格思路 3.项目代码结构4.使用方法3.代码分享1.支持跳转网页的QLabel组件2.三角形ICON按钮 四.总结 大小:33.3 …...
阿里云 Serverless 助力盟主直播:高并发下的稳定性和成本优化
在直播场景中,阿里云 Serverless 应用引擎 SAE 提供的无缝弹性伸缩与极速部署能力,确保直播间高并发时的流畅体验,降低了我们的运营成本,简化了运维流程。结合阿里云云原生数据库 PolarDB 的 Serverless 能力,实现了数…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
python打卡day49@浙大疏锦行
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...
在ubuntu等linux系统上申请https证书
使用 Certbot 自动申请 安装 Certbot Certbot 是 Let’s Encrypt 官方推荐的自动化工具,支持多种操作系统和服务器环境。 在 Ubuntu/Debian 上: sudo apt update sudo apt install certbot申请证书 纯手动方式(不自动配置)&…...
React、Git、计网、发展趋势等内容——前端面试宝典(字节、小红书和美团)
React React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍,详细解释 用户: React Hook实现架构、.Hook不能在循环嵌套语句中使用 , 为什么,Fiber架构,面试向面试官介绍&#x…...
