第三周嵌入式周结
C++关键词
- Cin:对象(变量)》输入流
- Cout:对象(变量)》输出流
- Cerr:输入(错误信息)
- Cout与cerr:
- 输出正常信息用cout
- 错误信息用cerr
- While C语言中死循环
- Cout是有缓冲区的,类型是行缓冲;只有遇到\n才会输出
- Cerr无缓冲区,只要有输入,无论对错一定输出
- Clog无缓冲区输出就在日志上(输出日志信息)
- For语句升级for里的元素被释放减少空间解决循环变量浪费空间的问题
- 新类型: bool提高代码可读性条件表达式升级:可以将返回值作为左值
关键词的升级:static, const,register,extern,typeset
Register的升级
( 如果使用&获取一个register修饰变量的地址 那么就将该变量保存到内存)
- Register : 将修饰变量尽可能地放到寄存器中,省去从内存抓取变量的时间 提高程序运行效率
注意: - 1、只能修饰局部变量 不能修饰全局变量和函数。
- 2、register修饰的变量不能再用&获取该变量的地址
- 3、register修饰的变量一定是CPU所接受的数据类型
- register使用场景:频繁使用的变量
Const的升级
- Const:修饰变量
该变量为只读变量不能通过变量名来修改值
Const.修饰指针不能通过该指针修改指向内存空间的值
Const.关链词升级:const修饰的变量就是常量
注意:const指针对const指针
-*const int p=&count
应用场景:修饰函数形参;保证函数实参在执行过程中不被修改
typedef:
- 给数据类型重命名;
- 提高代码的可读性和移植性;
- 提高编程效率
函数名指针常量,保存函数入口地址
- using P_FUNC=int(*)(int,int)
- C语言中:auto关键字:自动变量(所在函数结束后释放空间)
- C++中:auto为类型推导;高效编程
传值VS传地址
- 传实参变量名,只能使用实参的值,不能修改;
- 传实参变量的地址,可以使用实参的值,也能修改;
- 要改值:传实参变量地址
- 不改值:传实参变量名
C++引用
- r-a引用
- 注意事项:定义并初始化引用的
- 使用场景:①函数形参返回值;②函数返回值可以作为左值
补充:
swap(a,b);//函数形参
func()=;//返回值
count<<func()<<endl;
int count=5;
const. int&r-count=count;//常引用
r-count++;
count++;
counts int & ref = 5;
常引用:(需绑定变量)
- 左值引用:只能绑定左值
- 右值引用(对象移动):只能绑定右值
- 左值:能修改,能取地址。
- 右值引用也是一种左值,右值引用可自加
std::move():可以将左值转换成右值
引用vs指针(区别)
- 1、指针是变量,引用是别名,引用解决函数传参地址选择问题
- 2、指针占用内存空间,引用也占内存空间(编译阶段确定,并且隐藏
- 3、指针有多级指针,引用有左值引用和右值引用
- 4、指针不安全,容易造成内存泄露。引用更安全
C语言动态分配内存的方式
- malloc\free
- C++:new\delete
malloc VS new
free VS delete1
- 1、malloc/free是函数;new/delete为运算符
- 2、malloc/free按照字节为单位分配;new/delete按照类型为单位
- 3、malloc/free不能初始化;new/delete可以初始化
inline:内嵌(只能修饰函数)
- 作用:以内存空间换运行时间,提高运行效率
- 规律:时间(编译)换空间(内存)
空间(内存)换时间(运行)
宏函数、自定义函数
int a=5;
int b=6;
intmax num=Max(a,b);
int max-num2=Max(a,b);//宏函数:省去函数传参,返回释放等一系列操作
int max-num2=Max(a,b);//自定义函数:形参需要分配空间
默认参数规则:默认参数的右边也必须是默认参数