C++基础语法——基本知识、数据类型、运算符及程序流程结构

本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下,不定时更新,欢迎关注
当前章节处于:
====>第1阶段-C++基础入门
---------第2阶段实战-通讯录管理系统,
---------第3阶段-C++核心编程,
---------第4阶段实战-基于多态的企业职工系统
---------第5阶段-C++提高编程
---------第6阶段实战-基于STL泛化编程的演讲比赛
---------第7阶段-C++实战项目机房预约管理系统

文章目录

  • 1.C++初识
    • 1.1 第一个C++程序
    • 1.2 C++注释
    • 1.3 变量
    • 1.4 常量
    • 1.5 关键字(标识符)
    • 1.6 标识符起名规则
  • 2. 数据类型
    • 2.1 整型
    • 2.2 sizeof
    • 2.3 浮点型
    • 2.4 字符型
    • 2.5 转义字符
    • 2.6 字符串型
    • 2.7 布尔类型
    • 2.8 数据输入
  • 3. 运算符
    • 3.1 算术运算符
    • 3.2 赋值运算符
    • 3.3 比较运算符
    • 3.4 逻辑运算符
  • 4. 程序流程结构
    • 4.1 选择结构
      • 4.1.1 if 语句判断
      • 4.1.2 三目运算符
      • 4.1.3 switch语句
    • 4.2 循环结构
      • 4.2.1 while循环
      • 4.2.2 do-while循环
      • 4.2.3 for循环
      • 4.2.4 嵌套循环
    • 4.3 跳转语句
      • 4.3.1 break
      • 4.3.2 continue语句
      • 4.3.3 goto语句

1.C++初识

编写一个C++程序的4个步骤

  • 创建项目 (使用Visual C++进行创建)
  • 创建文件 (在源文件中进行添加)
  • 编写代码(最核心最耗时的部分)
  • 运行程序(F5运行代码)

所有代码使用Visual C++进行编写,在编写时,需要先创建项目,再在源文件中添加cpp文件,在cpp文件中进行编写代码。

1.1 第一个C++程序

学习一门语言第一步是配置环境,第二步该是HelloWorld的,使用C++输出HelloWorld的代码如下:

#include <iostream>
using namespace std;

int main() {
	cout << "HelloWorld" << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

1.2 C++注释

  • 单行注释: //
  • 多行注释: /* */

1.3 变量

给一段指定的内存空间起名,方便操作这段内存。
定义语法

数据类型 变量名=变量初始值
int a =0;

1.4 常量

用于记录程序中不可改变的数据
两种定义的方式:

  1. #define 宏常量 注意不能在后面添加分号
    定义格式: #define 变量名 变量值
  2. const 修饰的变量
    定义格式: const 变量名=变量值;
#include <iostream>
using namespace std;
// 定义一个宏常量
#define Day 7
int main() {
	//Day = 8;会报错,宏常量不能更改
	cout << "Day值为:"<< Day <<endl;
	system("pause");
	return 0;
}

#include <iostream>
using namespace std;
int main() {
	const int a = 7;  // 注意需要添加分号
	//a = 8; // 会报错,const常量不能更改
	cout << "a值为:" << a << endl;
	system("pause");
	return 0;
}

1.5 关键字(标识符)

起变量名时,不可以关键字作为变量名。
在这里插入图片描述

1.6 标识符起名规则

作用:给C++规定的标识符(变量、常量)命名时,有一套自己的规则。给标识符命名时,争取左到见名知意的效果,方便自己和其他人阅读。

  • 标识符不能是关键字(见1.5)
  • 标识符只能由字母、数字、下划线组成
  • 第一个字符必须是字母或者下划线
  • 标识符中字母区别大小写

2. 数据类型

给变量分配一个合适的内存空间,

2.1 整型

int 变量名=变量值
在这里插入图片描述
长长整型long long中间有空格,短整型short取值范围为(-32768~32767),最常用的为int

2.2 sizeof

可以统计数据类型所占内存大小
sizeof(数据类型/变量名)

#include <iostream>
using namespace std;

int main() {
	short a = 1;
	int b = 2;
	long c = 3;
	long long d = 4;

	cout << "size of short      " << sizeof(short) << endl;
	cout << "size of short      " << sizeof(a) << endl;
	cout << "size of int        " << sizeof(int) << endl;
	cout << "size of int        " << sizeof(b) << endl;
	cout << "size of long       " << sizeof(c) << endl;
	cout << "size of long       " << sizeof(c) << endl;
	cout << "size of long long  " << sizeof(d) << endl;
	cout << "size of long long  " << sizeof(d) << endl;
	system("pause");
	return 0;
}

在这里插入图片描述
short<int<=long<=long long (long在linux32位为4字节,在linux64位为8字节)

2.3 浮点型

根据可以表示的数字范围不同可以分为单精度和双精度

  1. 单精度 float
  2. 双精度 double
    在这里插入图片描述
    定义格式
    float 变量名=变量值f f是因为编译器默认数字为double类型,如果不加f,会多做一步转换
    double 变量名=变量值
    默认情况,输出一个小数,会输出6位有效数字,不是小数点后6位,而是六位有效数字,示例代码如下
#include <iostream>
using namespace std;

int main() {
	float a = 3.1415926f;
	cout << a*100 << endl;
	system("pause");
	return 0;
}

在这里插入图片描述
科学计数法

#include <iostream>
using namespace std;

int main() {
	//float a = 3.1415926f;
	float a = 1e-3;
	cout << a << endl;
	system("pause");
	return 0;
}

在这里插入图片描述

如果位数过高那么会以e的形式打印:
在这里插入图片描述

2.4 字符型

占用一个字符
char 变量名=字符值 ‘a’

  • 注意1 :要用单引号括起来,不能用多引号
  • 注意2 :单引号里只能有一个字符,不可以是字符串
  • 注意3:字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码存到存储单元中去,用强制转换可以查看字符串对应的ASCII码
#include <iostream>
using namespace std;
int main() {
	char a = 'a';
	cout << a << endl;
	/*
	a:97
	A:65
	*/
	cout <<"a对应的ASCII码为:" << (int)a << endl; // 强制转换
	system("pause");
	return 0;
}
a
a对应的ASCII码为:97
请按任意键继续. . .

2.5 转义字符

用于表示一些不能显示出来的ASCII字符
在这里插入图片描述
水平制表位可以让输出更加整齐,有八个空格,下面演示水平制表符的效果:

#include <iostream>
using namespace std;
int main() {
	cout << "aa\tHello World" << endl;
	cout << "aaa\tHello World" << endl;
	cout << "aaaa\tHello World" << endl;
	system("pause");
	return 0;
}
aa      Hello World
aaa     Hello World
aaaa    Hello World
请按任意键继续. . .

2.6 字符串型

字符串在C++中有两种风格,一种是沿用C风格、一种是C++风格:

  1. C风格:char 变量名[ ] = “字符串值”
  2. C++风格:string 变量名=“字符串值”

C风格的字符串和C++风格的字符串演示如下:

#include <iostream>
using namespace std;
int main() {
	/*
	// C语言风格定义字符串
	char a[] = "Hello World";
	cout << a << endl;
	system("pause");
	return 0;
	*/
	// C++风格定义字符串
	string b = "Hello World";
	cout << b << endl;
	system("pause");
	return 0;
}

输出都为Hello World。visual studio2022中不需要再引入#include <string>,但是还是建议引入。

2.7 布尔类型

占用1个字节,取值为0和1,0代表假(false),1代表真(true)。

2.8 数据输入

之前写的代码只包括输出,为cout,通过键盘输入数据为cin,通过cin可以接收不同数据类型的值,实例代码如下:

#include <iostream>
#include <string>
using namespace std;
int main() {
	//1.整型
	int a; // 不定义初始值
	cout << "请输入一个整数:" << endl;
	cin >> a;
	//2.浮点型
	float b;
	cout << "请输入一个浮点数:" << endl;
	cin >> b;
	//3.字符型
	char c;
	cout << "请输入一个字符:" << endl;
	cin >> c;
	//4.字符串
	string d;
	cout << "请输入一个字符串:" << endl;
	cin >> d;
	//5.布尔型
	bool e;
	cout << "请输入一个布尔值:" << endl;
	cin >> e;
	cout << "整数a的值为:" << a << endl;
	cout << "浮点数b的值为:" << b << endl;
	cout << "字符c的值为:" << c << endl;
	cout << "字符串d的值为:" << d << endl;
	cout << "布尔e的值为:" << e << endl;
	system("pause");
	return 0;
}
请输入一个整数:
1
请输入一个浮点数:
1.1
请输入一个字符:
a
请输入一个字符串:
about
请输入一个布尔值:
1
整数a的值为:1
浮点数b的值为:1.1
字符c的值为:a
字符串d的值为:about
布尔e的值为:1

ctrl+K+C是整段注释

3. 运算符

3.1 算术运算符

在这里插入图片描述
在这里插入图片描述

  1. 两个整数相除,结果仍然是整数,除数不能为0
    10/20=0
    10/0报错
  2. 两个小数不能做取模运算

递增和递减都分为前置和后置,区别在于是先加还是先运算。举例前置和后置递增代码如下:

#include <iostream>
using namespace std;
int main() {
	int a = 2;
	int b;
	//前置++
	//b = ++a;	// 结果为a=3,b=3

	// 后置++
	b = a++;   // 结果为a=3,b=2
	cout << "a: " << a << "     b: " << b<<endl;
	system("pause");
	return 0;
}

前置++是先+再运算,后置++是先运算再+

3.2 赋值运算符

在这里插入图片描述

3.3 比较运算符

比较运算符返回结果为bool值,0或1,相等是两个=,不等于是 !=
在这里插入图片描述

3.4 逻辑运算符

在这里插入图片描述

4. 程序流程结构

流程结构分为三种:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:依据条件是否满足,有选择的执行相应功能
  • 循环结构:依据条件是否满足,循环多次执行某段代码

4.1 选择结构

4.1.1 if 语句判断

if-else

#include <iostream>
using namespace std;


int main() {
	// 定义一个分数
	int score = 0;
	cout << "请输入你的分数:";
	cin >> score;
	cout << "你输入的分数为:" << score << endl;
	if (score > 600) {
		cout << "恭喜你,你已被录取!" << endl;
	}
	else
	{
		cout << "很遗憾,你没有被录取" << endl;
	}
	system("pause");
	return 0;
}

if=else if -else

#include <iostream>
using namespace std;


int main() {
	// 定义钱数
	int money = 0;
	cout << "请输入你的钱数:";
	cin >> money;
	cout << "你的钱数为:" <<money<< endl;
	// 语句判断
	if (money >= 1000) {
		cout << "坐飞机回家!" << endl;
	}
	else if (money >= 500) {
		cout << "坐高铁回家!" << endl;
	}
	else {
		cout << "坐火车回家!" << endl;
	}
	system("pause");
	return 0;
}

嵌套if语句
目的是更精准的判断

#include <iostream>
using namespace std;
int main() {
	// 定义钱数
	int money = 0;
	cout << "请输入你的钱数:";
	cin >> money;
	cout << "你的钱数为:" << money << endl;
	// 语句判断
	if (money >= 1000) {
		if (money >= 2000) {
			cout << "坐飞机商务舱回家!" << endl;
		}
		else {
			cout << "坐飞机经济舱回家!" << endl;
		}
		
	}
	else if (money >= 500) {
		cout << "坐高铁回家!" << endl;
	}
	else {
		cout << "坐火车回家!" << endl;
	}
	system("pause");
	return 0;
}

三只小猪比体重:

#include <iostream>
using namespace std;

int main() {
	// 初始化体重
	int weightA = 0;
	int weightB = 0;
	int weightC = 0;
	// 接收体重
	cout << "请输入小猪A的体重:";
	cin >> weightA;
	cout << "请输入小猪B的体重:";
	cin >> weightB;
	cout << "请输入小猪C的体重:";
	cin >> weightC;
	// 打印体重
	cout << "小猪A的体重为:" << weightA << endl;
	cout << "小猪B的体重为:" << weightB << endl;
	cout << "小猪C的体重为:" << weightC << endl;
	// 进行比较

	if ((weightA > weightB) && (weightA > weightC)) {
		cout<<"三只小猪中体重最重的为小猪A,体重为:"<<weightA<<endl;
	}
	else if ((weightB > weightA) && (weightB > weightC)) {
		cout << "三只小猪中体重最重的为小猪B,体重为:" << weightB << endl;
	}
	else
	{
		cout << "三只小猪中体重最重的为小猪C,体重为" << weightC << endl;
	}
	system("pause");
	return 0;
}
请输入小猪A的体重:100
请输入小猪B的体重:200
请输入小猪C的体重:300
小猪A的体重为:100
小猪B的体重为:200
小猪C的体重为:300
三只小猪中体重最重的为小猪C,体重为300
请按任意键继续. . .

4.1.2 三目运算符

语法:表达式1?表达式2:表达式3

  • 如果表达式1为真,执行表达式2,并返回表达式2的结果;
  • 如果表达式1为假,执行表达式3,并返回表达式3的结果;

三目运算符返回的是变量,可以继续赋值

int a =10;
int b =10 ;
(a>b? a:b) =100 ======>   b==100

4.1.3 switch语句

if判断适合有区间判断的情况,switch语句适用于选择项比较明确的情况,下面进行代码举例,特别说明,需要在每一个case后加上break,否则代码将从第一个符合条件的case一直往下执行。最后加上default捕获没有case列举的情况:

#include <iostream>
using namespace std;

int main() {
	int day = 0;
	cout << "请输入星期:";
	cin >> day;
	switch (day)
	{
	case 1:
		cout << "星期一" << endl;
		break;
	case 2:
		cout << "星期二" << endl;
		break;
	case 3:
		cout << "星期三" << endl;
		break;
	case 4:
		cout << "星期四" << endl;
		break;
	case 5:
		cout << "星期五" << endl;
		break;
	default:
		cout << "星期放假!" << endl;
		break;
	}
	system("pause");
	return 0;
}

4.2 循环结构

满足循环条件,执行循环语句

4.2.1 while循环

while (循环条件){循环语句}
需要注意的是,需要明确while语句退出的条件,否则会陷入循环
代码举例:

#include <iostream>
using namespace std;
int main() {
	int num = 10;
	int count = 0;
	while (count < num) {
		cout << count << endl;
		count++;
	}
	system("pause");
	return 0;
}
0
1
2
3
4
5
6
7
8
9

猜数字实战
案例描述: 系统随机生成一个1到100之间的数字,玩家进行猜测,如果猜错,提示玩家数字过大或过小,如果猜对恭喜玩家胜利,并且退出游戏。

#include <iostream>

using namespace std;
#include <ctime>
int main() {
	// 添加随机数种子,防止每一次目标数字都一样
	srand((unsigned int)time(NULL));
	int target =  rand()%100 +1; // 目标数字
	int num = 0;
	while (true)
	{
		// 键盘接受数字
		cout << "请输入一个数字:";
		cin >> num;
		if (num == target) {
			cout << "猜中了!" << endl;
			break;
		}
		else if (num > target) {
			cout << "大了!" << endl;
		}
		else
		{
			cout << "小了!" << endl;
		}
	}
	system("pause");
	return 0;
}
请输入一个数字:45
大了!
请输入一个数字:34
小了!
请输入一个数字:42
猜中了!
请按任意键继续. . .

4.2.2 do-while循环

与while的区别是do-while会先执行一次循环语句,再判断循环条件,同样以输出0-9数字为例

#include <iostream>
using namespace std;
int main() {
	int num = 0;
	do {
		cout << num << endl;
		num++;
	} while (num < 10);
	system("pause");
	return 0;
}
0
1
2
3
4
5
6
7
8
9
请按任意键继续. . .

4.2.3 for循环

语法:for(起始表达式;条件表达式;末尾循环体){循环语句}
同样,以打印数字0-9为例:

#include <iostream>
using namespace std;
int main() {
	for (int i = 0; i < 10; i++) {
		cout << i << endl;
	}
	system("pause");
	return 0;
}
0
1
2
3
4
5
6
7
8
9
请按任意键继续. . .

可以看到,for循环比while结构性更强,可读性也更好,while和for在大多数情况下可以互换,while和for最大区别就是for知道循环次数,while不知道循环次数

4.2.4 嵌套循环

在循环体中再嵌套一层循环,解决一些实际问题,以9*9乘法表为例:

#include <iostream>
using namespace std;
int main() {
	for (int i = 1; i < 10; i++) {
		for (int j = 1; j <= i; j++) {
			cout << j << "x" << i <<"=" << i * j<<" ";
		}
		cout << endl;
	}
	system("pause");
	return 0;
}
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
请按任意键继续. . .

4.3 跳转语句

4.3.1 break

break用于跳出选择结构或者循环结构,使用情况如下:

  • switch语句中,case后使用
  • 循环语句中,跳出循环
  • 嵌套循环,跳出当前最近的内层循环
#include <iostream>
using namespace std;
int main() {
	for (int i = 0; i < 10; i++) {
		cout << i << endl;
		if (i == 5) {
			break;
		}
	}
	system("pause");
	return 0;
}
0
1
2
3
4
5
请按任意键继续. . .

4.3.2 continue语句

跳过本次循环中余下尚未执行的语句,继续执行下一次循环,同样以上面的代码为例:

#include <iostream>
using namespace std;
int main() {

	for (int i = 0; i < 10; i++) {
		if (i == 5) {
			continue;
		}
		cout << i << endl;
	}
	system("pause");
	return 0;
}
0
1
2
3
4
6
7
8
9
请按任意键继续. . .

可以看到,跳过了5,并且继续向后执行后面的循环。

4.3.3 goto语句

无条件跳转语句,跳转到标记的位置
注意第二个FLAG之后是一个冒号,说明是一个标记,不建议使用

#include <iostream>
using namespace std;
int main() {
	
	for (int i = 0; i < 10; i++) {
		if (i == 5) {
			goto FLAG;
		}
		cout << i << endl;
	}
	FLAG:
	cout << "跳转成功!" << endl;
	system("pause");
	return 0;
}
0
1
2
3
4
跳转成功!
请按任意键继续. . .

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章学会Vim

一篇文章学会Vim 声明&#xff1a;以下内容均为我个人的理解&#xff0c;如果发现错误或者疑问可以联系我共同探讨 简介 Vim是一个高度可定制的终端文本编辑器&#xff0c;它可以很方便的创建和修改任何类型的文本。作为vi的升级版&#xff0c;有许多新的特性(以下列出的特性…

Qt界面篇:Qt停靠控件QDockWidget、树控件QTreeWidget及属性控件QtTreePropertyBrowser的使用

1、功能介绍 本篇主要使用Qt停靠控件QDockWidget、树控件QTreeWidget及Qt属性控件QtTreePropertyBrowser来搭建一个简单实用的主界面布局。效果如下所示。 2、控件使用详解 2.1 停靠控件QDockWidget QDockWidget可以停靠在 QMainWindow 内或作为桌面上的顶级窗口浮动。默认值…

rollup 插件输出生成钩子

✨专栏介绍 Rollup专栏是一个专门介绍Rollup打包工具的系列文章。Rollup是一个现代化的JavaScript模块打包工具&#xff0c;它可以将多个模块打包成一个或多个文件&#xff0c;以提高应用程序的性能和加载速度。 在Rollup专栏中&#xff0c;您将学习到如何安装和配置Rollup&a…

如何选择合适的语音呼叫中心?

市场上不同的语音呼叫中心提供商&#xff0c;都有其独特的优势和不足。企业在选择语音呼叫中心服务公司时&#xff0c;主要考虑以下因素&#xff1a;服务质量、价格、技术支持、客户支持等。 首先&#xff0c;服务质量是选择语音呼叫中心需关注的最重要因素之一。 为确保语音…

虾皮广告数据分析:如何进行虾皮广告数据分析以优化广告效果

虾皮&#xff08;Shopee&#xff09;作为一家知名的电商平台&#xff0c;广告数据分析是优化广告效果的关键步骤。通过对广告数据进行深入分析&#xff0c;卖家可以了解广告的表现、找出优势和不足&#xff0c;并制定更有效的广告策略。在本文中&#xff0c;我们将介绍如何进行…

ElasticSearch深度分页解决方案

一、前言 ElasticSearch是一个基于Lucene的搜索引擎&#xff0c;它支持复杂的全文搜索和实时数据分析。在实际应用中&#xff0c;我们经常需要对大量数据进行分页查询&#xff0c;但是传统的分页方式在处理大量数据时会遇到性能瓶颈。本文将介绍ElasticSearch分页工作原理、深…

VM中安装Linux以及Win系统

目录 准备条件 安装RHEL9.3 步骤一&#xff1a;按照图片进行操作 步骤二&#xff1a;选择配置方式 步骤三&#xff1a;选择虚拟芯片 步骤四&#xff1a;安装镜像 步骤五&#xff1a;选择操作系统 步骤六&#xff1a;名字以及存储位置 步骤七&#xff1a;配置虚拟机参数…

C#利用openvino部署PP-TinyPose人体姿态识别

【官方框架地址】 github.com/PaddlePaddle/PaddleDetection 【算法介绍】 关键点检测算法往往需要部署在轻量化、边缘端设备上&#xff0c;因此长期以来都存在一个难题&#xff1a;精度高、速度则慢、算法体积也随之增加。而PP-TinyPose的出世彻底打破了这个僵局&#xff0c…

git 本地仓库

本地仓库 start.bat 启动

promethues grafana 安装和使用

文章目录 1、promethues安装2、node-exporter安装3、grafana安装4、配置promethues监控node节点5、grafana操作外传 Docker 镜像下载地址&#xff1a; https://hub.docker.com 比较好的hub.docker.com///-- https://hub.docker.com/u/bitnami grafana监控面板&#xff1a;https…

[LitCTF 2023]这是什么?SQL !注一下 !

[LitCTF 2023]这是什么&#xff1f;SQL &#xff01;注一下 &#xff01; wp 题目描述&#xff1a;为了安全起见多带了几个套罢了o(▽)q 页面内容&#xff08;往下滑&#xff09;&#xff1a; SQL 语句已给出&#xff0c;无非是更换了闭合方式。 先输个 1 试试&#xff1a; …

Capsolver:解决Web爬虫中CAPTCHA挑战的最优解决方案

Web爬虫已经成为从各种在线来源提取和分析数据的不可或缺的技术。然而&#xff0c;在Web爬取过程中&#xff0c;经常会遇到的一个共同挑战是CAPTCHA。CAPTCHA&#xff08;完全自动化的公共图灵测试&#xff0c;用于区分计算机和人类&#xff09;是一种安全措施&#xff0c;旨在…

【面试高频算法解析】算法练习3 双指针

前言 本专栏旨在通过分类学习算法&#xff0c;使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目&#xff0c;帮助您深度理解每种算法&#xff0c;避免出现刷了很多算法题&#xff0c;还是一知半解的状态 专栏导航 二分查找回溯双指针滑动窗口深度优先搜索…

python 基础语法函数

函数定义 def 函数名(形参列表用逗号隔开)&#xff1a; 函数体 return 返回值 # 有参数 无返回值 def my_length(data):count 0for i in data:count 1print(f"data count{count}")my_length(str1) my_length(str2)#无参数无返回值 def say_hello():print("h…

Idea如何配置git

打开Ideal&#xff0c;点击Settings&#xff0c;找到Version Control这一栏&#xff0c;然后点开&#xff0c;找到Git 如果我们电脑是已经有git&#xff0c;那我们就点击那个有点像文件夹的标致&#xff0c;然后找到我们安装在电脑上面的自己安装的git的exe结尾的文件&#xff…

Android linephone-android sdk设置语音编码问题

1.遇到的问题 今天遇到linphone-android sdk需要解决语音编码问题&#xff0c;需要指定编码。查了下配置&#xff0c;里面没有发现类似的配置。 ## Start of factory rc # This file shall not contain path referencing package name, in order to be portable when app is r…

云原生技术专题 | 解密2023年云原生的安全优化升级,告别高危漏洞、与数据泄露说“再见”(安全管控篇)

背景介绍 2023年&#xff0c;我们见证了科技领域的蓬勃发展&#xff0c;每一次技术革新都为我们带来了广阔的发展前景。作为后端开发者&#xff0c;我们深受其影响&#xff0c;不断迈向未来。 随着数字化浪潮的席卷&#xff0c;各种架构设计理念相互交汇&#xff0c;共同塑造了…

进程和计划任务-------后续(二)

一、进程管理 1.进程启动---------- 前台启动与后台启动 进程需要手动启动 前台启动&#xff08;运行&#xff09;&#xff1a;通过终端启动&#xff0c;且启动后一直占据终端&#xff08;影响当先终端的操作&#xff09; 后台启动&#xff1a;可通过终端启动&#xff0c;但启…

ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript

ts axios 指定返回值类型&#xff0c;返回数据类型不确定该怎么办 typescript 转到 ts 以来&#xff0c;一直有个问题困扰着我&#xff0c;就是每次用 axios 获取数据时&#xff0c;返回值 res 的类型都不能确定&#xff0c;这就导致编辑器一直提示我&#xff1a; 原因 原因是…

深入理解可变参数

目录 1.C语言方式 1.1.宏介绍 1.2.原理详解 1.3.案例分析 1.4.其他实例 2.C之std::initializer_list 2.1.简介 2.2.原理详解 2.3.案例分析 3.C之可变参数模版 3.1.简介 3.2.可变参数个数 3.3.递归包展开 3.4.逗号表达式展开 3.5.Lambda 捕获 3.6.转发参数包 4…