一、基本数据类型
Bool
||或
&&且
!非
字面值
二、变量(对象)
变量提供一个具名的、可供程序操作的存储空间。变量由其数据类型决定所占空间的大小和布局方式、该空间能存储的值的范围、变量能参与的运算
初始化
声明和定义
为了支持分离式编译,C++语言将声明和定义区分开来。声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。而定义(definition)负责创建与名字关联的实体
(声明一个变量时不能初始化)
extern int i; //声明i
作用域
基本的引用和指针
可以引用指针(指针是一个对象),也可以定义指向一个指针的指针,但指针不能指向引用
命令的使用
sizeof() 获取占用字节大小 需注意:不同数据类型使用的字节大小不同,编译时就执行
可以通过sizeof(array)/sizeof(array数据类型)来获得数组长度
需注意 构建的字符串填充char数组占用个数为字节个数+1 换行符
strlen() 是一个函数,需要引入头文件<string>, 在运行时执行,获取输入长度的大小遇到NULL中止
char a[10]="you";
int b=sizeof(a); //b=10
int c=strlen(a); //c=3
name.length() 帮助获取到string中的有效字符个数
strlen(name)帮助检索char字符数组中的有效字符个数
sizeof(name)
char name[]={'o', 'k', '\0'}; 创建字符串
char name[]={'o', 'k'}; 创建字符数组
char name[]="ok";创建c语言字符串填充数组
cin只读到空格前的数 空格后的数会留到读取下一次输入
cin.getline(name,20);只能接受字符数组,读取完整的行内容
用strlen()前要#include <string>
用power()前要#include <math>
string也有空格断输入的问题
getline(cin,name); 成员函数
string不用关心长度
一维数组
int data[]{0,1};
二维数组
int data[][3]={
{0,1,2},{5,6,7}};
读写数组
data[0][3]=2
数组名称里越贴近名称的维度越高
遍历只针对容器
数组如需在循环里输出指定位,需要在编译时就指定数组大小,不能靠运行时输入确定大小
if(){
}
else if(){
}
else{
}
for(A, B, C)
{D}
For在第一次循环时执行A,判断条件B是否成立,B成立执行D, D完毕后执行C
Break跳出当前操作逻辑循环并终止循环,如果是嵌套循环,只跳出一层
Continue跳出当前操作逻辑循环并进入下次循环,continue只会跳出一层 只能在循环里用
Return函数中才能用,当前程序逻辑无需继续执行,直接移交执行权给函数
%取余
Do while
do
{循环体
}while(条件)
语法糖
简化了循环的操作流程,可以遍历数组和数组结构的数据体
应用性越强,结构复杂度越高,降低了执行效率
int DATA[]=一个数组
For(auto 名字:DATA)
{
cout<<名字<<endl;
}
三目运算符(三元运算符)
只针对两个值进行筛选
只能拿来筛选值
可用if替代,但不能替代if语句
条件?结果1:结果2
int C=A>B?A:B;
如果条件为真,返回结果1,假返回结果2
位运算
二进制在程序中编码中很难展示 框架级设计常见,产品开发中不常见
位运算主要是针对数据以二进制的方式进行运算
高效,节省内存
进行位运算时,如果要做推断校验,需先把数据转换为二进制,再进行运算
& 按位与 a&b 相同位的两个数字都为1,有一为0则为0
| 按位或 a|b 相同位数据,有一为1则为1
^ 按位异或 a^b 相同位数据,不同为1,相同为0
~ 按位取反 ~a 为1变0,为0变1
<< 左移 a<<b 将数据位向左移动,新进位用0填补,左移相当于乘以2的移动数的次方
>> 右移 a>>b 正数,将数据位向左移动,缺失位用0填补; 负数,将数据位向右移动,缺失位用1填补 正数右移相当于除以2的移动数的次方
按位运算符的优先级
1.~
2.<<,>>
3.&
4.^
5.|
6.&=,^=,|=,<<=,>>=
应用
1.快速乘除2 左移右移
2.加密解密一个数字 按位异或
3.交换AB两个变量值
A=A^B; B=A^B; A=A^B (B=A+B-B)
4.获取二进制最后一位
按位与 A&0x1
5.快速判断奇偶数(二进制最后一位为0为偶数) 取余2速度很慢
6.位运算中的取末尾3或4位
末尾三位A&7,四位A&0xf
7.获取二进制N位上的数
B=A>>(N-1)&0x1
8.把二进制的第N位变为0或1
看连招释放 超时置为0,一个int 32个布尔值 可以控制多个开关
B=1<<(N-1)|A改为1
B=~(1<<(N-1))&A改为0(1二进制为0001)
构建枚举
enum EColor
{Blue,
Red,
White,
};
使用
EColor TColor=Ecolor::Blue;
Switch给定的变量与常量进行比较,也可以switch枚举
所以switch可以转成IF,但不是所有IF都能转成switch
switch比较的是值
Switch(Ecolor)
{case Blue:
break;
case Red:
break;
case White:
brake;
default:
break;
}
函数
用来处理一系列逻辑运算和操作的整体
void 无类型,常在程序中定义返回函数类型,参数类型,指针类型等
结构体
扩展数据类型,用来更加清晰地描述事物的特性
struct结构体名称{
成员属性
};
结构体的初始化
在创建结构体对象的时候,如果给他默认赋值,
就不能使用花括号赋值
struct a
{
int Id;
};
a lizi{1}
a lizi.Id=1
结构体的大小
数据对齐,结构体中计算数据大小时,将向最大数据类型看齐,无法对齐就构建一个最大的数据类型内存单元,成员属性排列按从大到小就行