C++的学习笔记记录,也方便自己忘记的时候查询。
整型 short int long long long (unsigned 之后不可以存负数 但是可存储正数翻倍)
字符类型 char ('\n'也是一个字符 使用ASCII表示每个字符对应的数字 不能赋值为' ')
int i = '2';//i=50
char c = 97;//c='a'
布尔类型 bool (只有两个值 true false)
bool t = true;//输出 1
bool f = false;//输出 0
bool t1 = 100;//输出 1
常量 (固定数值 true false ‘c’变量加上const变成常量 不可修改)
4.3//默认为double
4//默认为int
5.2f//float类型
浮点类型 float double long double (可以使用科学计数法表示E 正号可以省略 +小数点向右移 -小数点向左移)
3.4E9 //3.4*10000000000
3.4E-9 //3.4/10000000000
//#include<climits> 可以使用FLT_MAX查看float储存的最大值
算术运算符 + - * / % (除法两边都是整数结果为整数 只要有一个是小数结果为小数 求模两边必须为整数)
int a=7;
int b=2;
int c=a/b;//3 不会四舍五入 只接收整数部分
组合赋值运算符 += -= *= /= %=
= //赋值运算符
a+=1; //就是a=a+1 - * / %同理
关系运算符 > < >= <= == (用于判断语句中)
自增运算符 ++
int i=0;
if(++i>0)cout<<i;//结果1
int j=0;
if(j++>0)cout<<j;//结果无
强制类型转换(显示转换)
(int)1.1 //C语法
int(1.1) //C++语法
自动类型推断 auto (auto声明的变量必须初始化)
auto a = 'a';//a 为char
auto b = 1;//b 为 int
数组 [] (数据类型 数组名 数组长度(大于0))
int array[5];//声明int类型的数组长度是5
int a[5] = {1,2,3,4,5};//初始化
int b[5] = {1,2,3};//初始化 剩下的为0
int c[] = {1,2,3};//数组长度为3
int array[4]{1,2,3,4};//C++11新的初始化方法
透过索引访问或者设置数组的值
*访问不存在的索引不报错但会返回未知的值
字符串 char[] string
char c[] = "Far";//C语言 末尾自动加'\0'
不可以通过名字赋值
strlen(c);//取得字符串长度
cin>>c;空白中断输入
cin.getline(c,5);//不中断 注意末尾'\0'
string s = "Far";//C++ string类库 需要#include <string>
string s1 = s;//可以赋值
s.length();//长度
结构体 struct (可包含多个类型 使用前需要先定义)
struct Position {
float x;
float y;
float z;
}; //需要引号
Position player{1,2,3};//定义一个结构体类型并且初始化
Position p[]{ {1,1,1},{2,2,2} };//定义结构体数组并且初始化
player.x //访问和设置
枚举 enum (值为整形)
enum HeroType {
Tank,
Magic,
ADC,
};
HeroType ht = ADC;//定义枚举类型并且初始化 输出为2
&(引用) 对引用类型改变 相当于对原值进行改变
int b=0;
int& r = a;
r = b; //r的引用还是a 不改变 只是数据改变 a的数据也改变
指针 * (从内存地址中取得数据) (指针指向的类型需要相同)(使用前需要初始化)
int* p;//定义一个int类型的指针 *左右空格可有可无
int a=1;
p = &a;//指针指向变量a 或者 变量a的地址给指针p
int b = *p;//取得p指针所指向地址的数据 输出1
void* v;//空类型指针 可以接受任意变量的地址
int v1 = 1;
v = &v1;
cout<< *((int*)v);//使用前需要强制转换成指定类型的指针
int* p1 = NULL;//指向空的指针
int* p2 = nullptr;//指向空的指针
new delete
int* p = new int;//new申请新的内存 只能通过指针访问和设置
delete p;//不使用 需要释放内存
数组与指针 (地址连续)
int a[]{1,2};//a 为(头)指针
*a;//取得a[0]
*(a+1);//取得a[1]
int* p = new int[20];//使用指针声明数组
p[0] = 1;
*(p+1) = 2;
delete[] p; //释放数组内存
数组模板类
array<int, 9> a1 = { 1,2,3,4,5,6,7,8,9 }; //模板类 需要引用#include<array>
array<int,9> a2 = a1; //可以赋值
for循环 (判断结果为true则执行循环体 否则循环结束 不写大括号则默认只执行循环体的第一条语句)
for(初始化;判断是否执行循环;更新)
{
//循环体
}
for(int i = 0;i<10;i++)
{
cout<<i<<endl;
}
while循环
//初始化
while(判断)
{
//循环体
//更新
}
int i =0;
while(i<10)
{
cout<<i<<" ";
i++;
}
do while循环 (先执行一次循环体再判断)
do
{
//循环体
}while(判断);
int i = 0;
do
{
cout<<i; //输出0
}while(i>0);
遍历数组
int s[] = {1,2,3};
for(int i=0;i<s.length();i++){cout<<s[i]}
遍历数组新型方式
for(int temp : s){cout<<temp}//不能设置值
for(int& t : s){t*=2}//可以设置值
二维数组 [][]
int s[4][5]={
{1,1,1,1,1},
{1,1,1,1,1},
{1,1,1,1,1},
{1,1,1,1,1}};//4行5列
循环嵌套
for(int i = 0;i<4;i++)
{
for(int j=0;j<5;j++)
{
cout<<s[i][j]<<" ";
}
}
条件判断语句
if(判断){}
else if(判断){}
else if(判断){}
else{}
int i = 0;
if(i>0){cout<<i<<">0";}
else if(i<0){cout<<i<<"<0";}
else{cout<<i<<"=0";}
逻辑运算符 &&(条件全部满足) ||(条件满足一个即可) !(取反)
if(a>6&&a<8)cout<<a;
三元运算符 ()?:
条件表达式?表达式1:表达式2 (条件为true返回表达式1否则2)
int i = 5;
int a =(i>2)?1:0;//a = 1
switch语句
int i;
cin >> i;
switch (i) {
case 0:
break;
case 10:
break;
default: //可以省略
break;
}
break跳出循环语句
continue结束本轮循环(continue后的语句不会执行)从下一轮重新开始循环
类型别名
宏 #define (给任何字符串起别名 定义不加;)
#define END return 0 //使用END 带表 return 0
#define START int main() //使用START 带表 int main()
#define FString string //使用FString带表string
START
{
FSting s = "Far";
cout<<s;
END
}
typedef (只能给类型起别名 定义必须加;)
typedef string USting;//UString 带表string
没有评论:
发表评论