网页浏览总次数

星期六, 二月 17, 2024

C++学习笔记——语法基础

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



没有评论:

发表评论