函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)

news2025/3/19 0:27:49

一、函数的概念

•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函数时,传递给函数的参数ab,称为实际参数,简称实参
实际参数就是真实传递给函数的参数

2.形参

double Division(double x, double y)

•函数名Division后的括号中写的xy,称为形式参数,简称形参
•如果只是定义了Division函数,⽽不去调⽤的话, Add 函数的参数xy只是形式上存在不会向内存申请空间,所以叫形式参数。形式参数只有在函数被调⽤的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程是形参的实例化

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 AI 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();//函数真正值是3
	printf("%.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 函数调⽤ scanfprintf 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");
	else
		printf("⾮闰年\n");
	return 0;
} 
//判断是不是闰年
int is_leap_year(int y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return 1;
	else
		return 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函数可以使用
,keyi1`

Add函数有static修饰,Add函数不可以使用
在这里插入图片描述
结论
static 修饰函数和 static 修饰全局变量是⼀模⼀样的,⼀个函数在整个⼯程都可以使⽤,被static修饰后,只能在本⽂件内部使⽤,其他⽂件⽆法正常的链接使⽤了

使⽤建议
⼀个函数只想在所在的源⽂件内部使⽤,不想被其他源⽂件使⽤,就可以使⽤ static 修饰

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2317488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ImGui 学习笔记(五) —— 字体文件加载问题

ImGui 加载字体文件的函数似乎存在编码问题&#xff0c;这一点可能跟源文件的编码也有关系&#xff0c;我目前源文件编码是 UTF-16。 当参数中包含中文字符时&#xff0c;ImGui 内部将字符转换为宽字符字符集时候&#xff0c;采用的 MultiByteToWideChar API 参数不太对&#…

OpenCV计算摄影学(20)非真实感渲染之增强图像的细节函数detailEnhance()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 此滤波器增强特定图像的细节。 cv::detailEnhance用于增强图像的细节&#xff0c;通过结合空间域和频率域的处理&#xff0c;提升图像中特定细节…

Android PC 要来了?Android 16 Beta3 出现 Enable desktop experience features 选项

在之前的 《Android 桌面窗口新功能推进》 我们就聊过&#xff0c;Google 就一直在努力改进 Android 的内置桌面模式&#xff0c;例如添加了适当的窗口标题、捕捉窗口的能力、悬停选项、窗口大小调整、最小化支持、app-to-web 等。 比如在搭载 Android 15 QPR 1 Beta 2 的 Pix…

Git常用操作之GitLab

Git常用操作之GitLab 小薛博客官网&#xff1a;小薛博客Git常用操作之GitLab官方地址 1、GitLab安装 https://gitlab.cn/install/ 1、Docker安装GitLab https://docs.gitlab.cn/jh/install/docker.html 1、设置卷位置 在设置其他所有内容之前&#xff0c;请配置一个新的…

Netty基础—NIO的使用简介

1.Buffer缓冲区 (1)Buffer缓冲区的作用 在NIO中&#xff0c;所有的数据都是通过使用Buffer缓冲区来处理的。如果要通过NIO&#xff0c;将数据写到文件和网络或从文件和网络中读取数据&#xff0c;那么就需要使用Buffer缓冲区来进行处理。 (2)Buffer缓冲区的4个核心概念 Buffer缓…

Matlab 汽车ABS实现模糊pid和pid控制

1、内容简介 Matlab 181-汽车ABS实现模糊pid和pid控制 可以交流、咨询、答疑 2、内容说明 略 实现汽车防抱死制动系统&#xff08;ABS&#xff09;的控制算法&#xff0c;通常涉及到传统的PID控制和模糊PID控制两种方法。下面将分别介绍这两种控制策略的基本概念以及如何在M…

Muon: An optimizer for hidden layers in neural networks

引言 在深度学习领域&#xff0c;优化算法对模型训练效率和性能起着关键作用。从经典的随机梯度下降 (SGD) 及其动量法&#xff0c;到自适应优化方法 Adam/AdamW 等&#xff0c;一系列优化器大大加速了神经网络的收敛。然而&#xff0c;随着模型规模和数据量的爆炸式增长&…

【VSCODE 插件 可视化】:SVG 编辑插件 SVG Editor

插件下载 svgeditor 创建文件 Windows/Linux 快捷键 Ctrl Shift P 打开VSCODE 命令面板查找 New File With Svg Editor 编辑文件 保存文件 打开文件以继续编辑 CG 选中多个&#xff1a;shift单击没找到横向分布功能无法用键盘微调位置

Cursor插件市场打不开解决

问题现象&#xff1a; cursor搜索插件的时候提示错误&#xff0c;无法搜索安装插件 error while fetching extensions.failed to fetch 问题原因 cursor默认安装使用的并不是vs code的插件市场&#xff0c;国内网络有时候打不开 解决 修改插件市场地址并重启cursor 打开cur…

嵌入式开发之STM32学习笔记day06

基于STM32F103C8T6的开发实践——从入门到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器&#xff0c;广泛应用于嵌入式系统中。STM32F103C8T6是其中非常受欢迎的一款&#xff0c;凭借其强大的性能、丰富的外设接口和低廉的价格…

AI驱动的视频字幕提取与翻译工具

青梧字幕是一款基于Whisper技术的AI字幕提取工具&#xff0c;专为视频制作者、翻译人员和自媒体创作者设计。它通过先进的语音识别算法&#xff0c;能够自动从视频文件中提取字幕内容&#xff0c;并支持多种语言和字幕格式&#xff0c;极大地简化了字幕制作流程。 目前暂支持 …

【MySQL】MySQL审计工具Audit Plugin安装使用

MySQL审计工具Audit Plugin安装使用 https://www.cnblogs.com/waynechou/p/mysql_audit.html MySQL 5.6 开启审计功能 https://blog.51cto.com/u_15127556/4344503 MySQL之添加日志审计功能 https://blog.csdn.net/weixin_43279032/article/details/105507170 MySQL开启日志记录…

游戏引擎学习第163天

我们可以在资源处理器中使用库 因为我们的资源处理器并不是游戏的一部分&#xff0c;所以它可以使用库。我说过我不介意让它使用库&#xff0c;而我提到这个的原因是&#xff0c;今天我们确实有一个选择——可以使用库。 生成字体位图的两种方式&#xff1a;求助于 Windows 或…

用python代码将excel中的数据批量写入Json中的某个字段,生成新的Json文件

需求 需求&#xff1a; 1.将execl文件中的A列赋值给json中的TrackId&#xff0c;B列赋值给json中的OId 要求 execl的每一行&#xff0c;对应json中的每一个OId json 如下&#xff1a; {"List": [{"BatchNumber": "181-{{var}}",// "Bat…

《我的Python觉醒之路》之转型Python(十五)——控制流

[今天是2025年3月17日&#xff0c;继续复习第一章节、第二章节的内容 ] 《我的Python觉醒之路》之转型Python&#xff08;十四&#xff09;——控制流

PosterRender 实现微信下程序 分享商品生成海报

PosterRender 是什么 PosterRender 是一种专注于生成高质量海报图像的技术或工具&#xff0c;常用于生成静态图片&#xff0c;特别是适合用于营销、宣传和展示的图形设计。它通常用于在服务端或客户端渲染复杂的图像&#xff0c;包括文字、图形、图标、背景等&#xff0c;生成…

如何利用 Zeabur 实现 OceanBase 的一键部署

引言 Zeabur 是一个功能强大且即开即用的自动化部署平台&#xff0c;它不仅能迅速部署多种应用&#xff0c;还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户&#xff0c;如 AFFiNE、Bytebase 等企业客户&#xff0c;以及大量全栈和独立开发者。将…

(hash表+vector 数位和相等数对的最大和)leetcode 2342

一定要断点调试看看数据对不对的上&#xff01;&#xff01;&#xff01;不然很容易弄不清楚值和下标 这个题意思是在nums中找出相同数位和的值 如 数位和为7 nums中符合要求的有 43&#xff0c;7 在这些数中选两个相加取最大值&#xff0c;再与其他数位和取得的相加最大值比…

kmp报错→Cannot find skiko-windows-x64.dll.sha256

1、前言 学习kmp&#xff08;Kotlin MultiPlatform简称&#xff09;过程中报了错误&#xff0c;这个报错在直接运行desktop的main方法才会出现&#xff0c;用gradle运行却不会报错&#xff0c;新建的kmp项目也不会出现&#xff0c;我学习的写了一些代码的项目才会出现。   运…

Cocos Creator Shader入门实战(四):预处理宏定义和Chunk

引擎&#xff1a; 3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 学习Shader&#xff0c;前期是让人烦躁无味的&#xff0c;后期可能就是各种的逻辑让人抓耳挠腮。 一成不变的内容&#xff1a;遵循引擎设定的规则&#xff0c;理解引擎要求的规范。 这里&#xff0c;简单…