1.C语言初识
C语言初识
- C语言初识
- 基础知识
- hello world
- 数据类型
- 变量、常量
- 变量命名
- 变量分类
- 变量的使用
- 变量的作用域
- 常量
- 字符
- 字符串
- 转义字符
- 选择语句
- 循环语句
- 函数;数组
- 函数
- 数组
- 数组下标
- 操作符
- 操作符
- 算术操作符
- 移位操作符、位操作符
- 赋值操作符
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符__三目操作符 exp__表达式
- 逗号表达式
- 下标引用、函数调用和结构成员
- 关键字
- typedef__类型重命名
- static__
- register
- #define 定义常量和宏
- 结构体 struct
- static; define; struct
- static__
- register
- \#define 定义常量和宏
- 结构体 struct
- 指针
- 内存
- 取变量地址
- 指针变量 int* p;存放指针的变量
- 指针变量大小
C语言初识
基础知识
C面向过程,C++,Java面向对象。
text.h头文件
test.c
test.cpp编译器会按C++编译
编辑、(编译、连接、运行 ctrl+F5)、调试 F5 F10
掌握了一定的语法,有时间就刷题,伴随整个学习过程。
Byte=8bit, 1024Byte=KB_MB_GB_TB_PB
hello world
#include <stdio.h>
int main()
{printf("hello world\n");returen 0;//返回整数
}
代码从main函数开始写。main函数是程序的开始,从main函数第一行执行,只能存在一个。
printf:是一个库函数,在屏幕上打印数据,使用前需要包含头文件#include <stdio.h>
“”:是字符串
/n:是换行符
returen 0:返回整数
数据类型
| 数据类型 | 意义 | 字节 |
|---|---|---|
| char | 字符数据类型 | 1 |
| short | 短整型 | 2 |
| int | 整型 | 4 |
| long | 长整型 | 4\8 |
| long long | 整形 | 8 |
| float | 单精度浮点数 | 4 |
| double | 双精度浮点数 | 8 |
| long double | 扩展精度浮点数 | 8 |
#include <stdio.h>
int main()
{ printf("%d\n", sizeof(char));printf("%d\n", sizeof(short));printf("%d\n", sizeof(int));printf("%d\n", sizeof(long));printf("%d\n", sizeof(long long));printf("%d\n", sizeof(float));printf("%d\n", sizeof(double));printf("%d\n", sizeof(long double));
return 0;
}
%d:以10进制的形式打印一个整数
sizeof:操作符,计算类型/变量所占内存大小
变量、常量
生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)
有些值是可变的(比如:年龄,体重,薪资)。
变量命名
只能由字母(包括大写和小写)、数字和下划线( _ )组成。
不能以数字开头。
长度不能超过63个字符。
变量名中区分大小写的。
变量名不能使用关键字。
#include <stdio.h>
int main()
{int age=20; //类型 变量名 = 初始值double weight = 55.5; //55.5默认为doublefloat weight2 = 55.5f; //55.5f为float //变量名不能以数字开头return 0;
}
变量分类
#include <stdio.h>
int global = 2019;//全局变量
int main()
{int local = 2018;//局部变量int global = 2020;//局部变量printf("global = %d\n", global);//打印结果为global = 2020return 0;
}
局部变量 放在框外的变量
全局变量 放在框内
全局和局部冲突时,局部优先
变量的使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{int num1 = 0;int num2 = 0;int sum = 0;printf("输入两个操作数:>");scanf("%d %d", &num1, &num2);//scanf(格式%d整型,&取地址操作符,取出num1的地址)sum = num1 + num2;printf("sum = %d\n", sum);return 0;
}
使用scanf报错:
错误 C4996 ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
(微软编译器认为scanf函数不安全,建议使用scanf_s。但_s只有VS认识)
(1.建议使用scanf, 在第一行加:#define _CRT_SECURE_NO_WARNINGS 1)
(2.在newc++.file中加上#define _CRT_SECURE_NO_WARNINGS 1,默认添加)
#define _CRT_SECURE_NO_WARNINGS 1
//scanf:输入数据,从键盘读取到内存
//printf:输出数据,从内存输出到屏幕
//库函数-C语言编译器提供的函数,使用时需要包含头文件
#include <stdio.h>
int main()
{//int a = 0;//scanf("%d",&a);%d输入格式,&a取地址a,即数据存储地址//printf("%d",a);char ch = 0;scanf("%c",&ch);printf("%c",ch);return 0;
}
%c-字符
%d-整形
%s-字符串
%f-float
%lf-double
%p-地址的打印
变量的作用域
int g_val = 2024;//add.c 全局变量extern int g_val;//需要声明外部符号才能使用全局变量
printf("%d",g_val);
作用域(scope)
- 局部变量:局部范围。
- 全局变量:整个工程。
- 声明外部符号才能使用全局变量:extern int g_val;
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
//变量创建的本质:在内存中开辟一块空间,存放数据。
//销毁:把空间还给操作系统。 - 局部变量:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量:整个程序的生命周期
常量
#define SIZE 10//#define定义的标识符常量
#define MAX 1000
#define CH 'W'
const int n = 3;//长变量本质还是变量int arr[10];//数组中必须使用常量,不能使用[n]
int arr[SIZE]; //#define定义的标识符常量
- 字面常量。int a = 3;
- 常变量:具有常属性的变量。 const int n = 3;
- # define 定义的标识符常量 # define SIZE 10
- 枚举常量:一一列举(性别、颜色、血型)enum SEX
enum SEX
{//列出枚举类型enum SEX可能的值,默认从0开始。MALE=4,FEMALE,SECRET
};
int main()
{printf("%d\n",MALE);printf("%d\n", FEMALE);printf("%d\n", SECRET);return 0;
}
字符
字符串
#include <string.h>//warning C4013: “strlen”未定义;
int main()
{char ch1[6] = { 'a','b','c','d','e','f' };char ch2[] = "abcdef";//字符串的结束标志是一个 \0的转义字符printf("%s\n", ch1);printf("%s\n", ch2);int len1 = strlen(ch1);//strlen:计算字符长度,\0不统计int len2 = strlen(ch2);printf("%d\n",len1);printf("%d\n", len2);//abcdef烫烫烫MF袆,since打印到\0停止//abcdef//19,since计算到\0停止//6return 0;
}
字符串:由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal)。字符串的结束标志是一个 \0的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

调试:逐语句(S)-F11__逐过程(0)-F10__跳出(T)-Shift+F11
转义字符
int main()
{printf("(are you ok??)\n");//??)-->],三字母词会被转为]printf("(are you ok\?\?)\n");//\? 在书写连续多个问号时使用,防止他们被解析成三字母词return 0;
}
int main()
{printf("c:\test\test.c\n");printf("c:\\test\\test.c\n");//c: est est.c,since \t 会被解析为制表符tab//c:\test\test.c//\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符return 0;
}
| 转义字符 | 释义 |
|---|---|
| \? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
| \’ | 用于表示字符常量’ |
| \“ | 用于表示一个字符串内部的双引号 |
| \\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
| \a | 警告字符,蜂鸣 |
| \b | 退格符 |
| \f | 进纸符 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \ddd | ddd表示1~3个八进制的数字。 如: \130 表示字符X |
| \xdd | dd表示2个十六进制数字。 如: \x30 表示字符0 |
int main()
{printf("%c\n",'\130'); //\ddd ddd表示1~3个8进制的数字。 如: \130--> X的ASCII码为130//8进制转化为10进制,130-->88printf("%c\n",'\x31'); //\xdd dd表示2个十六进制数字。 如: \x31 1//16进制转化为10进制,31-->49return 0;
}
选择语句
//选择语句
int main()
{printf("start study.\n");printf("do you willing study?(1 or 0)\n");int flag = 0;scanf("%d",&flag);if (flag == 1)printf("good!\n");elseprintf("bad!\n");return 0;
}
if()后无;else无;赋值使用 ==
循环语句
int main()
{int line = 0;while (line < 50){printf("write code:%d\n",line);line++;}if (line == 50)printf("get good jio!\n");elseprintf("continue!!!\n");return 0;
}
函数;数组
#include <stdio.h>
int main()
{return 0;
}
函数
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int ADD(int x, int y)//形参
{int z = x + y;return z;
}
int main()
{int a = 0; int b = 0;//实参scanf("%d %d", &a, &b);int sum = ADD(a, b);printf("%d\n",sum);return 0;
}
数组
int main()
{int arr[10];//整形数组char ch[8];//字符型数组
}
数组下标
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; while (i < 10) {printf("%d\n", arr[i]);//数组下标从0开始arr[0]i++;}return 0;
}
操作符
操作符
算术操作符
/除法
- 整数除法:7/2
- 浮点数除法:7.0/2_除数被除数,至少一个是浮点数
%取模 - mod_得到的是余数
- 7%2_只适用于整形运算
7.0默认为double
7.0f 认为是float
移位操作符、位操作符
>>右移 <<左移
&与 ^异或 |或
赋值操作符
= 赋值
符合赋值:a+=5–>a=a+5
+=自增 -= *= /=
&= ^= |=
>>= <<=
单目操作符
2+3 双目:有两个操作数
| ! - + & sizeof ~ – ++ * (类型) | 逻辑反操作 负值 正值 取地址 操作数的类型长度(以字节为单位) 对一个数的二进制按位取反 前置、后置-- 前置、后置++ 间接访问操作符(解引用操作符) 强制类型转换 |
|---|
单目:只有一个操作数
!:真假变换(0假,非0真)
int main()
{int a = 0;//0为假,非0为真if (a)//a为真,进入if{printf("ture\n");}if (!a)//a为假,进入if{printf("false\n");}printf("%d\n",!a);//会输出1return 0;
}
sizeof__操作数的类型长度(以字节为单位)是个操作符不是函数
int main()
{int a = 0;printf("%d", sizeof(a));printf("%d", sizeof a );//a的括号可以去掉,说明sizeoif不是函数printf("%d", sizeof(int));//但是int的不可以去掉4字节printf("%d", sizeof(double));//8字节return 0;
}
++自增
int main()
{int a = 1;int b = ++a;//前置++,先++再使用printf("a=%d b=%d\n", a, b);//a = 2 b = 2a = 1;b = a++;//后置++,先使用再++printf("a=%d b=%d\n", a, b);//a = 2 b = 1return 0;
}
(类型)强制类型转换
int main()
{int a = (int)3.14;//将3.14强制转换为整形printf("%d\n", a);//输出为3return 0;
}
关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
逻辑操作符
| && || | 逻辑与 逻辑或 |
|---|
&&逻辑与全真为真 ||逻辑或一真则真
int main()
{int a = 0;int b = 5;if (a && b)//全真才真{printf("true\n");}elseprintf("false\n");return 0;
}
条件操作符__三目操作符 exp__表达式
exp1? exp2 : exp3
真 执行 不执行
假 不执行 执行
int main()
{int a = 0; int b = 0; int m = 0;scanf("%d %d", &a, &b);m = (a > b ? a : b);//a大于b?真就输出执行a,假就执行bprintf("%d\n", m);return 0;
}
逗号表达式
exp1, exp2, exp3, …expN
从左向右依次计算
整个表达式的结果是最后一个表达式的结果
下标引用、函数调用和结构成员
[] () . ->
下标引用操作符[]
int main()
{int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };// 0,1,2,3,4,5,6,7,8,9printf("%d\n", arr[5]);//下标5,输出为6,下标引用操作符[],数组下标从0开始return 0;
}
函数调用操作符()
int z = ADD(a , b);//函数调用操作符
printf("sth");//这个也是
关键字
| auto | break | case | char | const | continue | default | do | double else | enum |
|---|---|---|---|---|---|---|---|---|---|
| extern float | for | goto | if | int | long | register | return | short | signed |
| sizeof | static struct | switch | typedef union | unsigned | void | volatile | while |
auto:自动__局部变量自动创建自动销毁,但是每个局部变量都有该性质,所以省略了auto int a;
break:循环__终止
case:switch case
char:数据类型__字符类型
const:修饰类型,常属性
continue:循环__继续
default:默认
do:循环__do while
enum:枚举类型
extern:声明外部符号的,修饰变量
goto:分支语句
register:寄存器
return:函数的返回
signed:修饰类型__有符号的
static:静止
struct:结构体
typedef:类型重命名
union:联合体类型
void:函数返回值,函数的参数,修饰指针,空的
volatile:少见
while:循环
typedef__类型重命名
typedef unsigned int u_int;
typedef unsigned long long ull;
int main()
{u_int num1 = 0;ull num2 = 2;return 0;
}
static__
在C语言中:
static是用来修饰变量和函数的
- 修饰局部变量-称为静态局部变量
- 修饰全局变量-称为静态全局变量
- 修饰函数-称为静态函数
static 修饰局部变量的时候
本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了
static 修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束才结束
void test()
{//static int a = 5;//6 7 8 9 10 11 12 13 14 15int a = 5;//6 6 6 6 6 6 6 6 6 6a++;printf("%d ", a);
}
int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}
static修饰全局变量
全局变量具有外部链接属性,所以在其他源文件内部可以使用
static修饰全局变量,改变了全局变量的连接属性
又外部链接属性变成了内部连接属性,无法调用
无法解析的外部符号 _g_val
感觉作用域变小了,但是都在静态区
static int g_val = 2024;//add.cextern int g_val;//声明外部符号
int main()
{printf("%d\n", g_val);return 0;
}
static修饰函数和修饰全局变量一样
函数具有外部链接属性,被static修饰变成内部链接属性
使得该函数只能在自己源文件内部使用
static int ADD(int x, int y)
{return(x + y);
}//add.cextern int ADD(int x,int y);//声明外部符号
int main()
{int a = 0; int b = 0;scanf("%d %d", &a, &b);int s = ADD(a, b);//无法解析的外部符号 _ADDprintf("%d\n", s);return 0;
}
register
int main()
{//register仅仅是建议作用//建议放在寄存器中,但不是真的放,取决于编译器register int num = 10;return 0;
}
#define 定义常量和宏
定义常量
#define M 100
int main()
{int arr[M] = { 0 };//int为4字节,4*100=400int m = M;printf("%d\n", sizeof(arr));//400printf("%d\n", M);//100return 0;
}
定义宏
#define ADD(x,y)(x+y)//宏定义:名字(参数)(实现体)
int main()
{int a = 10; int b = 20;int c = ADD(a, b);printf("%d\n", c);return 0;
}
结构体 struct
char
short
int
long
long long
float
double
复杂类型:学生:名字char,年龄int,性别char
struct Stu//结构体
{char name[20];//一个汉字2个字符int age;char sex[5];//需要5个字符
};
int main()
{struct Stu s = {"ruarua",20,"man"};printf("%s %d %s\n",s.name,s.age,s.sex);//结构体访问成员操作符s.成员return 0;
}
static; define; struct
static__
在C语言中:
static是用来修饰变量和函数的
- 修饰局部变量-称为静态局部变量
- 修饰全局变量-称为静态全局变量
- 修饰函数-称为静态函数
static 修饰局部变量的时候
本来一个局部变量是存放在栈区的,如果被static修饰就存储到静态区了
static 修饰局部变量改变了变量的存储类型(位置),使得这个静态变量的生命周期变长了,直到程序结束才结束
void test()
{//static int a = 5;//6 7 8 9 10 11 12 13 14 15int a = 5;//6 6 6 6 6 6 6 6 6 6a++;printf("%d ", a);
}
int main()
{int i = 0;while (i < 10){test();i++;}return 0;
}
static修饰全局变量
全局变量具有外部链接属性,所以在其他源文件内部可以使用
static修饰全局变量,改变了全局变量的连接属性
又外部链接属性变成了内部连接属性,无法调用
无法解析的外部符号 _g_val
感觉作用域变小了,但是都在静态区
static int g_val = 2024;//add.cextern int g_val;//声明外部符号
int main()
{printf("%d\n", g_val);return 0;
}
static修饰函数和修饰全局变量一样
函数具有外部链接属性,被static修饰变成内部链接属性
使得该函数只能在自己源文件内部使用
static int ADD(int x, int y)
{return(x + y);
}//add.cextern int ADD(int x,int y);//声明外部符号
int main()
{int a = 0; int b = 0;scanf("%d %d", &a, &b);int s = ADD(a, b);//无法解析的外部符号 _ADDprintf("%d\n", s);return 0;
}
register
int main()
{//register仅仅是建议作用//建议放在寄存器中,但不是真的放,取决于编译器register int num = 10;return 0;
}
#define 定义常量和宏
定义常量
#define M 100
int main()
{int arr[M] = { 0 };//int为4字节,4*100=400int m = M;printf("%d\n", sizeof(arr));//400printf("%d\n", M);//100return 0;
}
定义宏
#define ADD(x,y)(x+y)//宏定义:名字(参数)(实现体)
int main()
{int a = 10; int b = 20;int c = ADD(a, b);printf("%d\n", c);return 0;
}
结构体 struct
char
short
int
long
long long
float
double
复杂类型:学生:名字char,年龄int,性别char
struct Stu//结构体
{char name[20];//一个汉字2个字符int age;char sex[5];//需要5个字符
};
int main()
{struct Stu s = {"ruarua",20,"man"};printf("%s %d %s\n",s.name,s.age,s.sex);//结构体访问成员操作符s.成员return 0;
}
指针
内存
指针是用来访问内存的,就是内存单元的地址。
每个内存单元的大小是1个字节Byte 。
32位的计算机有32根地址线,电信号,可以管理2^32个字节的空间=4GB内存
![[Pasted image 20250101231015.png]]
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取变量地址
0x开头是16进制
int main()
{int num = 10;//申请4字节空间#//取num地址,num4字节,每个字节都有地址,取出的是第一个字节的地址printf("%p\n", &num);//%p是以地址的形式打印__0x004ffbe8return 0;
}//一个整数4字节,32bit,16进制,4个二进制位转化一个16进制位
![[Pasted image 20250101232539.png]]
指针变量 int* p;存放指针的变量
*:p是指针变量
int:p指向的是int类型的变量
int main()
{int a = 10;int* p;//p为一个整形指针变量*p = 30;//*p,解引用p,*p就是aprintf("%d\n", a);//a=30return 0;
}
指针变量大小
32位机器:地址是32个地址位,4字节;
64位机器:地址64位,8字节。
int main()
{int a = 10;int* p = &a;printf("%zd\n", sizeof(p));//x86是4字节,x64是8字节printf("%zd\n", sizeof(int*));//x86是4字节,x64是8字节return 0;
}
相关文章:
1.C语言初识
C语言初识 C语言初识基础知识hello world数据类型变量、常量变量命名变量分类变量的使用变量的作用域 常量字符字符串转义字符 选择语句循环语句 函数;数组函数数组数组下标 操作符操作符算术操作符移位操作符、位操作符赋值操作符单目操作符关系操作符逻辑操作符条…...
软件测试中的BUG
文章目录 软件测试的生命周期BugBug 的概念描述 Bug 的要素案例Bug 级别Bug 的生命周期与开发产生争执怎么办?【高频面试题】先检查自身,Bug 是否描述的不清楚站在用户角度考虑并抛出问题Bug 的定级要有理有据提⾼自身技术和业务水平,做到不仅…...
TinyEngine v2.2版本发布:支持页面嵌套路由,提升多层级路由管理能力开发分支调整
2025年春节假期已过,大家都带着慢慢的活力回到了工作岗位。为了让大家在新的一年继续感受到 Tiny Engine 的成长与变化,我们很高兴地宣布:TinyEngine v2.2版本正式发布!本次更新带来了重要的功能增强------页面支持嵌套路由&#…...
Web自动化之Selenium添加网站Cookies实现免登录
在使用Selenium进行Web自动化时,添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为,我们可以将已登录状态的Cookies存储起来,并在下次自动化测试或爬虫任务中直接加载这些Cookies,从而跳过登录步骤。 Cookies简介 …...
Storm实时流式计算系统(全解)——中
storm编程的基本概念-topo-spout-bolt 例如下: storm 编程接口-spout的结构及组件实现 storm编程案例-spout组件-实现 这是我的第一个组件(spout组件继承BaseRichSput)所有重写内部的三个方法,用于接收数据(这里数据是…...
【算法工程】大模型局限性新发现之解决能连github但无法clone项目的问题
最近,linux服务器遇到一个奇怪的问题,能ping通github,但是无法clone git项目,尝试了各种大模型,都提到代理啥的问题,发现没有一个能解决问题。 后来尝试设置 http.sslVerify 为 false,才解决问题…...
让deepseek更专业的提示词教程
一、明确需求和目标 在使用DeepSeek之前,首先要明确你的需求和目标。例如,你是要生成一篇学术论文的摘要,还是一个商业文案的大纲,亦或是一段技术分析。明确的目标可以帮助你更有针对性地编写提示词。 二、使用专业术语和结构化…...
《Python实战进阶》No 9:使用 Celery 实现异步任务队列
第9集:使用 Celery 实现异步任务队列 引言 在现代 Web 应用中,许多操作(如发送邮件、处理文件上传、执行复杂计算等)可能需要耗费较长时间。如果这些操作直接在主线程中执行,会导致用户请求阻塞,降低用户体…...
【Mark】记录用宝塔+Nginx+worldpress+域名遇到的跨域,301,127.0.0.1,CSS加载失败问题
背景 想要用宝塔搭建worldpress,然后用域名直接转https,隐藏掉ipport。 结果被折磨了1天,一直在死活在301,127.0.0.1打转 还有css加载不了的情况 因为worldpress很多是301重定向的,所以改到最后我都不知道改了什么&am…...
Linux | Ubuntu 与 Windows 双系统安装 / 高频故障 / UEFI 安全引导禁用
注:本文为 “buntu 与 Windows 双系统及高频故障解决” 相关文章合辑。 英文引文,机翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何将 Ubuntu 20.04 和双启动与 Windows 10 一起安装 Dave’s RoboShack Published in…...
计算机毕业设计SpringBoot+Vue.js手机商城 (源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
CSS—隐藏元素:1分钟掌握与使用隐藏元素的方法
个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–display:none3–visibility: hidden4–opacity: 05–position: absolute;与 left: -9999px;6–z-index 和 position7–clip-path: circle(0%) 2. display:none 标签会挂载在html中,但是不会在页面上…...
EtherCAT总线学习笔记
一、EtherCAT的概述: EtherCAT是由德国BECKHOFF自动化公司于2003年提出的 实时工业以太网技术。它具有高速和高数据有效率的特点,支持多种设备连接拓扑结构。其 从站节点使用专用控制芯片,主站使用标准的以太网控制器。 EtherCAT的主要特点如…...
自学微信小程序的第八天
DAY8 1、使用动画API即可完成动画效果的制作,先通过wx.createAnimation()方法获取Animation实例,然后调用Animation实例的方法实现动画效果。 表40:wx.createAnimation()方法的常用选项 选项 类型 说明 duration number 动画持续时间,单位为毫秒,默认值为400毫秒 timing…...
WebRTC与PJSIP:呼叫中心系统技术选型指南
助力企业构建高效、灵活的通信解决方案 在数字化时代,呼叫中心系统的技术选型直接影响客户服务效率和业务扩展能力。WebRTC与PJSIP作为两大主流通信技术,各有其核心优势与适用场景。本文从功能、成本、开发门槛等维度为您深度解析,助您精准匹…...
Vue-Flow绘制流程图(Vue3+ElementPlus+TS)简单案例
本文是vue3Elementplusts框架编写的简单可拖拽绘制案例。 1.效果图: 2.Index.vue主代码: <script lang"ts" setup> import { ref, markRaw } from "vue"; import {VueFlow,useVueFlow,MarkerType,type Node,type Edge } fro…...
PDF文件转换为PNG图像
要实现将PDF文件转换为PNG图像,可以使用Python的pdf2image库。pdf2image是一个基于poppler和Pillow(PIL)的库,可以将PDF页面转换为图像。 首先,需要安装必要的库: pip install pdf2image在安装pdf2image时…...
c++中的静态多态和动态多态简介
在 C 中,多态性(Polymorphism) 分为 静态多态(Static Polymorphism) 和 动态多态(Dynamic Polymorphism),二者通过不同的机制实现代码的灵活性。以下是详细对比和核心要点࿱…...
如何通过 LlamaIndex 将数据导入 Elasticsearch
作者:来自 Elastic Andre Luiz 逐步介绍如何使用 RAG 和 LlamaIndex 提取数据并进行搜索。 在本文中,我们将使用 LlamaIndex 来索引数据,从而实现一个常见问题搜索引擎。 Elasticsearch 将作为我们的向量数据库,实现向量搜索&am…...
Boosting
Boosting 学习目标 知道boosting集成原理和实现过程知道bagging和boosting集成的区别知道AdaBoost集成原理 Boosting思想 Boosting思想图 每一个训练器重点关注前一个训练器不足的地方进行训练通过加权投票的方式,得出预测结果串行的训练方式 1 什么是boosting 随着…...
【通俗讲解电子电路】——从零开始理解生活中的电路(一)
导言:电子电路为什么重要? ——看不见的“魔法”,如何驱动你的生活? 清晨,当你的手机闹钟响起时,你可能不会想到,是电子电路在精准控制着时间的跳动;当你用微波炉加热早餐时&#…...
LeetCode72编辑距离(动态规划)
给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入:word1 “horse”, word2 “ros” 输出…...
rabbitmq单向ssl认证配置与最佳实践(适用于各大云厂商)
背景 这里后补直接上代码 最佳实践 主要从两个方面保证消息不丢失 RabbitMQ方面 创建队列时开启持久化创建交换器时开启持久化创建镜像队列(可选)开启延迟队列(可选) 代码层面 开启生产者到交换器回调参数开启交换器到队列…...
【K8S】Kubernetes 基本架构、节点类型及运行流程详解(附架构图及流程图)
Kubernetes 架构 k8s 集群 多个 master node 多个 work nodeMaster 节点(主节点):负责集群的管理任务,包括调度容器、维护集群状态、监控集群、管理服务发现等。Worker 节点(工作节点):实际运…...
Windows版FFmpeg使用及B站视频下载示例python源码
Windows版FFmpeg使用及B站视频下载示例python源码 FFmpeg介绍和下载 FFmpeg 是一个功能强大、灵活且广泛使用的多媒体处理工具,无论是在专业领域还是日常使用中,都能满足各种多媒体处理需求。FFmpeg 是一个开源项目,遵循 LGPL 或 GPL 许可。…...
飞书考勤Excel导入到自己系统
此篇主要用于记录Excel一行中,单条数据的日期拿取,并判断上下班打卡情况。代码可能满足不了大部分需求,目前只够本公司用,如果需要,可以参考。 需要把飞书月度汇总的考勤表导入系统中可以参考下。 下图为需要获取的年…...
【leetcode hot 100 560】和为K的子数组
解法一:用左右指针寻找字串,如果和>k,则减少一个数(left);如果和<k,则加上一个数(right)。 class Solution {public int subarraySum(int[] nums, int k) {int nu…...
EGO-Planner的无人机视觉选择(yolov5和yolov8)
EGO-Planner的无人机视觉选择(yolov5和yolov8) 效果 yolov5检测效果 yolov8检测效果 一、YOLOv8 vs YOLOv5:关键差异解析 1. 训练效率:为何YOLOv8更快? 架构轻量化 YOLOv8采用C2f模块(Cross Stage Partia…...
C++ | 面向对象 | 类
👻类 👾语法格式 class className{Access specifiers: // 访问权限DataType variable; // 变量returnType functions() { } // 方法 };👾访问权限 class className {public:// 公有成员protected:// 受保护成员private:// 私有成员 }…...
性能测试分析和调优
步骤 性能调优的步骤 性能调优的步骤: 1.确定问题:根据性能测试的结果来分析确定bug。–测试人员职责 2.分析原因:分析问题产生的原因。----开发人员职责 3.给出解决方案:可以是修改软件配置、增加硬件资源配置、修改代码等----…...
