当前位置: 首页 > news >正文

进一步了解C++函数的各种参数以及重载,了解C++部分的内存模型,C++独特的引用方式,巧妙替换指针,初步了解类与对象。满满的知识,希望大家能多多支持

C++的编程精华,走过路过千万不要错过啊!废话少说,我们直接进入正题!!!!

函数高级

C++的函数提高

函数默认参数

在C++中,函数的形参列表中的形参是可以有默认值的。

语法返回值类型 函数名 (参数 = 默认值){}

示例

#include<iostream>
using namespace std;
​
//函数的默认参数
//如果我们自己传入数据,就用自己的数据,如果没有那就用默认值
//语法:返回值类型 函数名称(形参 = 默认值){}
int func(int a,int b = 20,int c = 30)
{return a + b + c;
}
​
//注意事项
//如果某个位置已经有了默认参数,那么这个位置从左往右都必须有默认值
//如果函数声明有了默认参数,函数实现就不能有默认值
//声明和实现只能有一个默认参数
int func2(int a = 10,int b = 20);
int func2(int a = 10,int b = 20)//error
{return a + b;
}
​
​
int main()
{cout << func(10) << endl;cout << func(30) << endl;return 0;
}

函数占位参数

C++中函数的形参列表里可以有占位参教,用来做占位,调用函数时必须填补该位置

语法返回值类型 函数名 (数据类型){}

在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术

示例

#include<iostream>
using namespace std;
//函数占位参数,占位参数也可以有默认参数
void func(int a,int )
{cout << "this is func" << endl;
}
​
int main()
{func(10,10);//占位参数必须填补return 0;
}

函数重载

作用:函数名可以相同,提高复用性

函数重载满足条件

  1. 同一个作用域下

  2. 函数名称相同

  3. 函数参数类型不同或者个数不同或者顺序不同

注意:函数的返回值不可以作为函数重载的条件

示例

#include<iostream>
using namespace std;
​
//函数重载
//可以让函数名相同,提高复用性
​
//函数重载满足条件
//1. 同一个作用域下
//2. 函数名称相同
//3. 函数参数类型不同或者个数不同或者顺序不同
void func()
{cout << "func函数的调用" << endl;
}
​
void func(int a)
{cout << "func(int a)函数的调用!" << endl;
}
​
void func(double a)
{cout << "func(double a)函数的调用!" << endl;
}
​
void func(int a, double b)
{cout << "func(int a, double b)函数的调用!" << endl;
}
​
void func(double a,int b)
{cout << "func(double a,int b)函数的调用!" << endl;
}
​
int main()
{func();func(1);func(3.14);func(1,3.14);func(3.14,1);return 0;
}
func函数的调用
func(int a)函数的调用!
func(double a)函数的调用!
func(int a, double b)函数的调用!
func(double a,int b)函数的调用!

注意

int func(double a,int b)//这个无法重载,函数重载不可以作为函数重载条件
{cout << "func(double a,int b)函数的调用!" << endl;
}

函数重载的注意事项

  1. 引用作为重载条件

  2. 函数重载碰到函数默认参数

示例

#include<iostream>
using namespace std;
//引用作为重载条件
void func(int &a)
{cout << "func(int &a)" << endl;
}
​
void func(const int &a)//const int &a = 10;这是合法的代码
{cout << "func(const int &a)" << endl;
}
//函数重载碰到默认参数
void func2(int a,int b = 10)
{cout << "func2(int a,int b)" << endl;
}
​
void func2(int a)
{cout << "func2(int a)" << endl;
}
​
int main()
{int a = 10;func(a);//实现的是func(int &a)的函数func(10);//实现的是fun(const int &a)的函数func2(10);//当函数重载碰到默认参数,就会出现二义性,errorreturn 0;
}

内存模型

C++核心编程

主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。

内存分区模型

C++程序在执行时。将内存大方向划分为4个区域

  1. 代码区:存放函数体的二进制代码。由操作系统进行管理的。

  2. 全局区:存放全局变量和静态变量以及常量。

  3. 栈区:由编译器自动分配释放,存放函数的参数值局部变量等。

  4. 堆区:由程序员分配和释放,若程序员下释放,程序结束时由操作系统回收。

内存四区意义

不同区域存放的数据。暖予不同的生金周明,给我们更大的灵活编程

程序运行前

在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域 代码区:

  1. 存放CPU执行的机器指令

  2. 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可

  3. 代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令

全局区:

  1. 全局变量和静态变量存放在此

  2. 全局区还包含了常量区,字符串常量和其他常量也存放在此

  3. 该区域的数据在程序结束后由操作系统释放

示例:

#include<iostream>
using namespace std;
//全局变量
int g_a = 10;
int g_b = 10;
//const修饰的全局变量
const int c_g_a = 10;
const int c_g_b = 10;
int main()
{//创建普通的局部变量int a = 10;int b = 10;cout << "局部变量a的地址为:" << (int*)&a << endl;cout << "局部变量b的地址为:" << (int*)&b << endl;cout << "全局变量g_a的地址为:" << (int*)&g_a << endl;cout << "全局变量g_b的地址为:" << (int*)&g_b << endl;//静态变量,在普通变量前面加static,属于静态变量static int s_a = 10;static int s_b = 10;cout << "静态变量s_a的地址为:" << (int*)&s_a <<endl;cout << "静态变量s_b的地址为:" << (int*)&s_b <<endl;//常量//字符串常量cout << "字符串常量的地址:" << (int*)&"hello" << endl;//const修饰常量cout << "全局常量 c_g_a的地址为:" << (int*)&c_g_a << endl;cout << "全局常量 c_g_b的地址为:" << (int*)&c_g_b << endl;//const修饰的局部变量const int c_l_a = 10;const int c_l_b = 10;cout << "局部变量 c_l_a的地址为:" << (int*)&c_l_a << endl;cout << "局部变量 c_l_b的地址为:" << (int*)&c_l_b << endl;return 0;
}
局部变量a的地址为:0x61fe1c
局部变量b的地址为:0x61fe18
全局变量g_a的地址为:0x403010
全局变量g_b的地址为:0x403014
静态变量s_a的地址为:0x403018
静态变量s_b的地址为:0x40301c
字符串常量的地址:0x40409f
全局常量 c_g_a的地址为:0x404004
全局常量 c_g_b的地址为:0x404008
局部变量 c_l_a的地址为:0x61fe14
局部变量 c_l_b的地址为:0x61fe10

总结:

  1. C++中在程序运行前分为全局区和代码区

  2. 代码区特点是共享和只读

  3. 全局区中存放全局变量、静志变量、常量

  4. 常量区中存放const修饰的全局常量和字符串常量

程序运行后

栈区:

  1. 由编译器自动分配程放存放函数的参数,局部变量等

  2. 注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

示例:

#include<iostream>
using namespace std;
//栈区数据注意事项,不要返回局部变量的地址
//栈区的数据由编译器管理开辟和释放
int* func(int b)//形参数据也会放在栈区
{b = 100;int a = 10;//局部变量 存放在栈区,栈区的数据在执行完后自动释放return &a;//返回局部变量的地址
}
int main()
{//接受func函数的返回值int* p = func();cout << *p << endl;//这里显示错误,errorreturn 0;
}

堆区:

  1. 由程序员分配释放,若程序员不释放,程序结束时由操作系统回收

  2. 在C++中主要利用new在堆区开辟内存

示例:

#include<iostream>
using namespace std;
int* func()
{//利用new关键,可以将数据开辟到堆区//指针 本质是一个局部变量,放在栈上,但是数据放在堆区int *p = new int(10);return p;
}
​
int main()
{//堆区开辟数据int* a = func();cout << *a << endl;return 0;
}

总结: 堆区数据由程序员管理开辟和释放 堆区数据开辟利用new关键字进行开辟内存

new操作符

C++中利用new操作符在堆区开辟数据 堆区开辟的数据,由程序员手动开辟,手动释放。 释放利用操作符delete 语法:new 数据类型 利用new创建的数据,返回该数据对应的类型的指针

示例:

#include<iostream>
using namespace std;
//new的基本语法
int * func()
{//在堆区创建整型数据//返回该数据类型的指针int * p = new int(10);return p;
}
​
void test01()
{int * p = func();cout << *p << endl;//堆区的数据由程序员管理开辟,程序员管理释放//如果想释放堆区数据,delete p;cout << *p << endl;//非法访问,数据已释放,error,会出现乱码
}
​
//在堆区利用new开辟数据
void test02()
{//创建10个整型数据的数组在堆区int * arr = new int[10];//代表数组有10个元素for(int i = 0;i < 10; i++){arr[i] = i + 100;}for(int i = 0;i < 10; i++){cout << arr[i] << " ";}cout << endl;//释放堆区数组//释放数组的时候,要加[]才可以delete[] arr;
}
int main()
{test01();test02();return 0;
}

引用

引用C++核心编程引用的基本使用引用注意事项引用做函数参数引用函数返回值引用的本质常量引用

C++核心编程

引用的基本使用

作用:给变量起名

语法数据类型 &别名 = 原名

示例

#include<iostream>
using namespace std;
int main()
{int a = 10;int &b = a;b = 20;cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;
}
a = 20
b = 20

引用注意事项

  1. 引用必须初始化

  2. 引用在初始化后,不可以改变

示例

#inlcude<iostream>
using namespace std;
int main()
{//引用必须初始化int a = 10;int &b;//errorint &b = a;//引用初始化后,是不能更改引用的int c = 20;b = c;//errorcout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;return 0;
}

引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参

优点:可以简化指针修改实参

示例

#include<iostream>
using namespace std;
//交换函数
//值传递
void mySwap01(int a,int b)
{int tmp = a;a = b;b = tmp;cout << "a = " << a << endl;cout << "b = " << b << endl;//只在这个函数里面才有效,结束后还给系统
}
​
//指针的地址传递
void mySwap02(int* a,int* b)
{int tmp = *a;*a = *b;*b = tmp;
}
​
//引用传递
void mySwap03(int &a,int &b)
{int tmp = a;a = b;b = tmp;
}
​
int main()
{int a = 10;int b = 20;mySwap01(a,b);mySwap02(&a,&b);mySwap03(a,b);//引用传递,形参会修饰实参的cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;
}

引用函数返回值

作用:引用是可以作为函数的返回值存在的

注意:不要返回局部变量引用

用法:函数调用作为左值

示例

#include<iostream>
using namespace std;
​
//不要返回局部变量的引用
int& test01()
{int a = 10;//局部变量存放在四区中的栈区return a;
}
​
//函数的调用可以作为左值
int& test02()
{static int a = 10;//静态变量存放在全局区,在程序结束后由系统回收return a;
}
​
int main()
{int &ref = test01();cout << ref << endl;//error,a的内存已经释放,属于非法访问int &ret = test02();cout << ret <<endl;test02() = 1000;cout << ret <<endl;//这里的值ret会改成1000return 0;
}
引用的本质

本质:引用的本质在C++内部实现是一个指针常量。

示例

#include<iostream>
using namespace std;
​
//发现是引用,转化为int* const ref = &a;
void func(int& ref)
{ref = 100;//ref是引用,转换为*ref = 100;
}
​
int main()
{int a = 10;//自动转换为int* const ref = &a;指针常量是指针指向不可改,也说明了为何引用不可更改int& ref = a;ref = 20;//内部发现ref是引用,自动帮我们转化为*ref = 20;cout << "a = " << a << endl;cout << "ref = " << ref << endl;func(a);return 0;
}

常量引用

作用:常量引用主要用来修饰形微,防止误操作

在函数形参列表中,可以加const修饰形参,防止形参改变实参

#include<iostream>
using namespace std;
​
void showValue(const int & ref)
{ref = 20;//error,无法改变
}
int main()
{//常量引用//使用场景:用来修饰形参,防止误操作int a = 10;//int & ref = 10;error 引用必须引用一块合法的内存空间const int & ref =10;//这是允许的,编译器将代码修改为 int temp = 10; const int & ref = temp;int b = 100;showValue(b);cout << b << endl;return 0;
}

类与对象

C++中类与对象的学习

C++面向对象的三大特性为:封装继承多态

C++认为万事万物皆为对象。对象上有其属性和行为

例如: 人可以作为对象,属性有姓名、年龄、身高、体重…… 行为有走、跑、跳、吃饭、唱歌……

车也可以作为对象,属性有轮胎、方向盘、车灯……行为有载人、放音乐、开启空调……

具有相同性质的对象,我们可以抽象称为,人属于人类,车属于车类

封装

封装的意义1

封装是C++面向对象的三大特性之一

封装的意义:

  1. 将属性和行为作为一个整体

  2. 将属性和行为加以权限控制

封装意义1:

在设计类的时候,属性和行为写在一起,表现事物

语法class 类名 { 访问权限: 属性 / 行为 };

设计一个圆类

求圆的周长

#include<iostream>
using namespace std;
​
const double PI = 3.14;
//设计一个圆类,求圆的周长
//圆求周长的公式:2 * PI * 半径
//class代表设计一个类,类后面紧跟着的就是类名称
class Circle
{//访问权限//公共权限public://属性//半径int m_r;//行为//获取圆的周长double calculateZC(){return 2 * PI * m_r;}};
​
int main()
{//通过圆类 创建一个具体的圆(对象)//实例化 (通过一个类 创建一个对象的过程)Circle c1;//对圆对象的属性进行赋值c1.m_r = 10;cout << "圆的周长" << c1.calculateZC() << endl;return 0;
}

设计一个学生类

属性有姓名学号,可以给姓名学号赋值,可以显示学生姓名和学号

#include<iostream>
#include<string>
using namespace std;
​
class Student
{
public:string m_Name;int m_Id;void showStudent(){cout << "姓名:" << m_Name << "\t" << "学号:" << m_Id << endl; }
};
​
int main()
{//实例化对象Student s1;//s1对象进行属性赋值操作s1.m_Name = "zhangsan";s1.m_Id = 12345;s1.showStudent();//实例化对象Student s2;//s1对象进行属性赋值操作s2.m_Name = "lisi";s2.m_Id = 12346;s2.showStudent();return 0;
}

亦可以用下面的方式对类进行赋值操作

#include<iostream>
#include<string>
using namespace std;
​
class Student
{
public://类中的属性和行为统一称为成员string m_Name;int m_Id;
public:void showStudent(){cout << "姓名:" << m_Name << "\t" << "学号:" << m_Id << endl; }void setName(string name){m_Name = name;}void setId(int id){m_Id = id;}
};
​
int main()
{//实例化对象Student s1;//s1对象进行属性赋值操作s1.setName("zhangsan");s1.setId(12345);s1.showStudent();return 0;
}

封装的意义2

类在设计时,可以吧属性和行为放在不同的权限下,加以控制

访问权限有三种:

  1. public 公共权限

  2. protected 保护权限

  3. private 私有权限

示例

#include<iostream>
#include<string>
using namespace std;
//访问权限
//公共权限public    成员类内可以访问    类外也可以访问
//保护权限protected 成员类内可以访问    类外不可以访问
//私有权限private   成员类内可以访问    类外不可以访问
class Person
{
public://公共权限string m_Name;
protected://保护权限string m_Car;
private://私有权限int m_Password;
public:void func(){m_Name = "zhangsan";m_Car = "Tractor";m_Password = 123456;}void func2(){cout << "1." << m_Name << "\t" << "2." << m_Car << "\t" << "3." << m_Password << endl;}
};
​
int main()
{//实例化具体对象Person p1;//p1.m_Car = "Benz";//error,保护权限内容在类外是访问不到的//p1.m_Password = 123;error,保护权限内容在类外是访问不到的p1.func();p1.m_Name = "Lisi";p1.func2();return 0;
}

struct和class的区别

在C++中struct和class唯一的区别就在于默认的访问权限不同 区别:

  1. struct 默认权限为公共

  2. class 默认权限为私有

#include<iostream>
using namespace std;
​
class C1
{int m_A;//默认权限是私有权限
};
​
struct C2
{int m_A;//默认权限是公共权限
};
​
int main()
{C1 c1;c1.m_A = 10;//errorstruct C2 c2;c2.m_A = 10;//正确的return 0;
}

成员属性设置为私有

优点1:将所有成员属性设置为私有,可以自己控制读写权限

优点2:对于写权限,我们可以检测数据的有效性

示例

#include<iostream>
#include<string>
//成员属性设置为私有
//可以自己控制读写权限
//对于写权限可以检测数据的有效性
using namespace std;
int main()
{return 0;
}

相关文章:

进一步了解C++函数的各种参数以及重载,了解C++部分的内存模型,C++独特的引用方式,巧妙替换指针,初步了解类与对象。满满的知识,希望大家能多多支持

C的编程精华&#xff0c;走过路过千万不要错过啊&#xff01;废话少说&#xff0c;我们直接进入正题&#xff01;&#xff01;&#xff01;&#xff01; 函数高级 C的函数提高 函数默认参数 在C中&#xff0c;函数的形参列表中的形参是可以有默认值的。 语法&#xff1a;返…...

Chapter6:机器人SLAM与自主导航

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…...

Sass的使用要点

Sass 是一个 CSS 预处理器&#xff0c;完全兼容所有版本的 CSS。实际上&#xff0c;Sass 并没有真正为 CSS 语言添加任何新功能。只是在许多情况下可以可以帮助我们减少 CSS 重复的代码&#xff0c;节省开发时间。 一、注释 方式一&#xff1a;双斜线 // 方式二&#xff1a;…...

计算机启动过程,从按下电源按钮到登录界面的详细步骤

1、背景 自接触计算机以来&#xff0c;一直困扰着我一个问题。当我们按下电脑的开机键后&#xff0c;具体发生了哪些过程呢&#xff1f;计算机启动的具体步骤是什么&#xff1f; 计算机启动过程通常分为五个步骤&#xff1a;电源自检、BIOS自检、引导设备选择、引导程序加载和…...

LeetCode 刷题之 BFS 广度优先搜索【Python实现】

1. BFS 算法框架 BFS&#xff1a;用来搜索 最短路径 比较合适&#xff0c;如&#xff1a;求二叉树最小深度、最少步数、最少交换次数&#xff0c;一般与 队列 搭配使用&#xff0c;空间复杂度比 DFS 大很多DFS&#xff1a;适合搜索全部的解&#xff0c;如&#xff1a;寻找最短…...

Hadoop01【尚硅谷】

大数据学习笔记 大数据概念 大数据&#xff1a;指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 主要解决&#xff0c;海量数据的存储…...

Echarts 配置横轴竖轴指示线,更换颜色、线型和大小

第018个点击查看专栏目录本示例是描述如何在Echarts上配置横轴竖轴指示线&#xff0c;更换颜色、线型和大小。方法很简单&#xff0c;参考示例源代码。 文章目录示例效果示例源代码&#xff08;共85行&#xff09;相关资料参考专栏介绍示例效果 示例源代码&#xff08;共85行&a…...

OpenAI 官方API Java版SDK,两行代码即可调用。包含GhatGPT问答接口。

声明&#xff1a;这是一个非官方的社区维护的库。 已经支持OpenAI官方的全部api&#xff0c;有bug欢迎朋友们指出&#xff0c;互相学习。 注意&#xff1a;由于这个接口&#xff1a; https://platform.openai.com/docs/api-reference/files/retrieve-content 免费用户无法使…...

SpringBoot 日志文件

(一)日志文件有什么用&#xff1f;除了发现和定位问题之外&#xff0c;我们还可以通过日志实现以下功能&#xff1a;记录用户登录日志&#xff0c;以便分析用户是正常登录还是恶意破解用户。记录系统的操作日志&#xff0c;以便数据恢复和定位操作 。记录程序的执行时间&#x…...

SQL71 检索供应商名称

描述Vendors表有字段供应商名称&#xff08;vend_name&#xff09;、供应商国家&#xff08;vend_country&#xff09;、供应商州&#xff08;vend_state&#xff09;vend_namevend_countryvend_stateappleUSACAvivoCNAshenzhenhuaweiCNAxian【问题】编写 SQL 语句&#xff0c;…...

02:入门篇 - 漫谈 CTK

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 十万个为什么 五千个在哪里?七千个怎么办?十万个为什么?。。。生活中,有很多奥秘在等着我们去思考、揭示! 同样地,在使用 CTK 时,很多小伙伴一定也存在诸多疑问: 为什么 CTK Plugin Framework 要借…...

SpringBoot常用注解

SpringBootApplication注解包含如下三个SpringBootConfigurationEnableAutoConfigurationComponentScanSpringBootConfiguration等同于Configuration&#xff0c;是属于spring的一个配置类这里的 Configuration 对我们来说并不陌生&#xff0c;它就是 JavaConfig 形式的 Spring…...

RBAC权限模型

什么是RBAC权限模型&#xff1f; RBAC是基于角色的访问控制&#xff0c;在RBAC中&#xff0c;权限与角色相关联&#xff0c;用户通过成为适当角色的成员而得到这些角色的权限。 1.0级 用户、角色、权限 2.0 权限分级 公司>部门>小组 2.1 权限继承 ps: 这个人是一个小组长…...

【郭东白架构课 模块一:生存法则】07|法则三:架构师如何找到自己的商业模式?

你好&#xff0c;我是郭东白&#xff0c;今天我们来聊聊架构活动中对商业价值的考量。 今天我们要讲的是架构师的第三个生存法则&#xff1a;作为一个架构师&#xff0c;必须要在有限的资源下最大化架构活动所带来的商业价值。对于任何一个架构活动而言&#xff0c;架构师的可…...

STM32 - 看门狗

独立看门狗 IWDG专业时钟LSI 低功耗仍可以运行对定时的控制比较松喂狗这些时间是按照40kHz时钟给出。实际上&#xff0c;MCU内部的RC频率会在30kHz到60kHz之间变化。此外&#xff0c;即使RC振荡器的频率是精确的&#xff0c;确切的时序仍然依赖于APB接口时钟与RC振荡器时钟之间…...

Redis集群搭建

一、哨兵模式 在 redis3.0之前&#xff0c;redis使用的哨兵架构&#xff0c;它借助 sentinel 工具来监控 master 节点的状态&#xff1b;如果 master 节点异常&#xff0c;则会做主从切换&#xff0c;将一台 slave 作为 master。 哨兵模式的缺点&#xff1a; &#xff08;1&…...

车载基础软件——AUTOSAR AP典型应用案例

我是穿拖鞋的汉子&#xff0c;魔都中一位坚持长期主义的工程师&#xff01; 最近不知道为何特别喜欢苏轼的一首词&#xff1a; 缺月挂疏桐&#xff0c;漏断人初静。谁见幽人独往来&#xff0c;缥缈孤鸿影。 惊起却回头&#xff0c;有恨无人省。拣尽寒枝不肯栖&#xff0c;寂寞…...

消息中间件----内存数据库 Redis7(第3章 Redis 命令)

Redis 根据命令所操作对象的不同&#xff0c;可以分为三大类&#xff1a;对 Redis 进行基础性操作的命令&#xff0c;对 Key 的操作命令&#xff0c;对 Value 的操作命令。3.1 Redis 基本命令首先通过 redis-cli 命令进入到 Redis 命令行客户端&#xff0c;然后再运行下面的命令…...

react-03-react-router-dom-路由

react-router-dom:react路由 印记中文:react-router-dom 1、路由原理 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>前端路由的基石_history</title> </head> <body><a hre…...

2自由度悬架LQR控制

目录 1 悬架系统 1.1 悬架结构示意图 1.2 悬架数学模型 1.3 路面激励 2.仿真分析 2.1simulink模型 2.2 仿真结果 2.3 结论 3. 总结 1 悬架系统 1.1 悬架结构示意图 1.2 悬架数学模型 其中&#xff1a;x1为悬架动扰度&#xff0c;x2为车身加速度&#xff0c;x3为轮胎…...

C语言返回类型为指针的一些经典题目(下)

续上一篇文章&#xff0c;上一篇文章题目都很经典&#xff0c;这一篇也不例外。一.返回类型为指针经典题目(下)1.代码(第六题)char *GetMemory3(int num) {char *p (char *)malloc(sizeof(char) * num);return p; } void Test3(void) {char *str NULL;str GetMemory3(100…...

OpenAI 官方api 阅读笔记

网站 API Key concepts Prompts and completions You input some text as a prompt, and the model will generate a text completion that attempts to match whatever context or pattern you gave it. Token  模型通过将文本分解成token来理解和处理, 处理token数量取…...

微服务项目【分布式锁】

创建Redisson模块 第1步&#xff1a;基于Spring Initialzr方式创建zmall-redisson模块 第2步&#xff1a;在zmall-redisson模块中添加相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</a…...

JavaWeb5-线程常用属性

目录 1.ID 2.名称 3.状态 4.优先级 5.是否守护线程 5.1.线程类型&#xff1a; ①用户线程&#xff08;main线程默认是用户线程&#xff09; ②守护线程&#xff08;后台/系统线程&#xff09; 5.2.守护线程作用 5.3.守护线程应用 5.4.守护线程使用 ①在用户线程&am…...

JVM调优及垃圾回收GC

一、说一说JVM的内存模型。JVM的运行时内存也叫做JVM堆&#xff0c;从GC的角度可以将JVM分为新生代、老年代和永久代。其中新生代默认占1/3堆内存空间&#xff0c;老年代默认占2/3堆内存空间&#xff0c;永久代占非常少的对内存空间。新生代又分为Eden区、SurvivorFrom区和Surv…...

JAVA练习53-打乱数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、题目-打乱数组 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 2月17日练习内…...

基于RK3588的嵌入式linux系统开发(三)——Uboot镜像文件合成

本章uboot镜像文件的合成包括官网必备文件rkbin下载和uboot镜像文件合成两部分内容&#xff0c;具体分别如下所述。 &#xff08;一&#xff09;下载rkbin文件包 以上uboot编译生成的uboot镜像不能直接烧录到板卡中运行&#xff0c;需要与atf、bl31、ddr配置文件等必备文件合成…...

wireshark抓包后通过工具分包

分包说明&#xff1a;关于现场问题分析&#xff0c;一般都是通过日志&#xff0c;这个属于程序中加的打印&#xff0c;或存数据库&#xff0c;或者存文本形式&#xff0c;这种一般比较符合程序逻辑&#xff1b;还有一种就是涉及到网络通信方面的&#xff0c;需要通过抓包来分析…...

举个栗子~Tableau 技巧(251):统一多个工作表的坐标轴范围

在工作汇报场景&#xff0c;有一个很常见、很多数据粉反馈的需求&#xff1a;同一看板上的两个图表&#xff0c;因为轴范围不一致&#xff08;如下图&#xff09;&#xff0c;很难直观比较。有什么办法可以统一它们的坐标轴范围呢&#xff1f; 类似需求&#xff0c;不论两个还是…...

Centos7 调整磁盘空间

1. 查看磁盘空间占用情况&#xff1a; df -h 可以看到 /home 有很多剩余空间,占了绝大部分&#xff0c; 而我又很少把文件放在home下。 2. 备份 /home 下的内容&#xff1a; cp -r /home/ /homebak/ 3. 关闭home进程&#xff1a; fuser -m -v -i -k /home 报错: -bash: fuser…...

专门做店铺转让的网站/竞价推广账户竞价托管收费

经过几个实验,我来到了一个令人满意的解决方案,这也保留了顶部可见项目的细滚动位置.事实上,需要保存和恢复三个不同的信息&#xff1a;列表状态(例如哪些组被展开),第一个可视项目的索引以及它的微滚动位置.不幸的是,似乎只有第一个被可扩展列表视图的onSaveInstanceState方法…...

设计师自己做网站/seo网站怎么搭建

1.按钮前后台事件 <asp:Button ID"Button1" runat"server" OnClick"Button1_Click" Text"Button"OnClientClick"alert(客房端验证&#xff0c;阻止向服务器端提交);return false;" /> 2.注册相关事件&#xff1a;onbl…...

永州网站建设/搜索引擎内部优化

将word文档转换成ppt教程 三个步骤 Word设置 Word转换为PPT PPT美化 Word设置 将Word转换成PPT时&#xff0c;第一步要对Word的文字内容进行分级。只有做好这项准备工作&#xff0c;才能省时省力。 法一&#xff1a;样式分级法 "样式分级法”是指直接利用页面上的…...

福步外贸网站/杭州seo论坛

文章目录前言&#x1f680; 1.端午节起源&#x1f680; 2.献礼端午节&#x1f308; 2.1 Python画一盘粽子&#x1f308; 2.2 html5数粽子小游戏前言 2022年6月3日&#xff0c;每年一度的端午节来临了&#xff0c;在这里程序猿用特殊的表达来献礼端午节 &#x1f680; 1.端午节…...

网上兼职网站怎么做的/竞价推广账户托管服务

Python 3中的File对象不支持next()方法。 Python 3有一个内置函数next()&#xff0c;它通过调用其next ()方法从迭代器中检索下一个项目。 如果给定了默认值&#xff0c;则在迭代器耗尽返回此默认值&#xff0c;否则会引发StopIteration。 该方法可用于从文件对象读取下一个输入…...

wordpress 首页定制/球队积分排名

前言阿里巴巴一直是很多Java程序最想去的公司之一&#xff0c;今天我就给大家分享一个阿里Java程序员面经&#xff1a;阿里面试流程面试一般是四到五面&#xff0c;以电话面试为主。最后一轮面试时HR面试&#xff0c;所以只要挺过前面的技术面试一般就OK了。第一轮是考察基础&a…...