作用:给一段指定的内存空间起名,方便操作这段内存。
语法:数据类型 变量名=初始值
int a=10;
作用:用于记录程序中不可更改的数据
两种方式
#define a 10
const int b=10;
作用:关键字是C++中预先保留的单词(标识符)
在定义变量或者常量的时候,不要用关键字,否则会产生歧义
int char long if case const define
作用:C++规定给标识符(常量,变量)命名时,遵循一定的规则
int int=10;(错误)
int a=10; int a1=10; int a1_=10;(正确) int a*=10(错误)
int b1=10; int _1=10; (正确) int _1=10(错误)
int c=10不代表此时C=10
在创建一个变量或者常量时,必须要指出相应的数据类型,否则无法给变量分配内存(数据类型就是为了分配合适的空间)
作用:整型变量表示的是整数类型的数据
C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同
short(短整型) 2字节 -2^15——2^15-1int(整型)4字节 -2^31——2^31-1long(长整型) windows为4,linux下32位4,64位8 -2^31——2^31-1long long(长长整型) 8字节 -2^63——2^63-1
(1字节 = 二进制8位 / 十进制3位 / 十六进制2位)
作用:利用sizeof关键字可以统计数据类型所占内存大小
语法:sizeof(数据类型/变量)
int a=10;
可以得出:sizeof(int)=4,sizeof(a)=4
作用:用于表示小数
浮点型变量分为两种
单精度float双精度doublefloat4字节7位有效数字double8字节15-16位有效数字
有效数字是指在一个数中,从该数的第一个非零数字起,直到末尾数字称为有效数字,如0.123的有效数字是123。
float a=3.14f;(float类型定义的数据最好后面加上f,这样和double形成区别)
科学计数法
float a=1e2; //1*10^2
float b=1e-2; //1*0.1^2
作用:字符型变量用于显示单个字符
语法:char ch='a';(用单引号,单引号内只能有一个字符,不能是字符串)
主要就记住A=65,a=97
作用:用于表示一些不能显示出来的ASCLL字符
现阶段我们常用的转义字符有:(技术太差,我就用这一个);(想要输出'',就需要用;cout<
作用:用于表示一串字符
两种风格:
C风格字符串:char 变量名[]="字符串值"
C++风格字符串:string 变量名=“字符串值”(需要加上#include头文件)
char a[]="abcdef";
string b="abcdef";
作用:布尔数据类型代表真或假的值
bool类型只有两个值(只要是非0的值都代表真)
bool类型只占1个字节大小
注意:使用bool类型的时候,初始化时一定要赋初值,不然输出结果为204。因为程序在Debug模式下,未对变量初始化,写入内存的是0xcc ,所以最后显示的结果为204。如果已经赋初值,则结果才是1或者0。
作用:用于执行代码的运算
算数运算符用于处理四则运算赋值运算符用于将表达式的值赋给变量比较运算符用于表达式的比较,并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值
作用:用于处理四则运算(除了正常的正负加减乘,下面介绍一些常用的)
int a=10,b=5,c=3; 可以得出a/b=2,a/c=3;
int a=10,b=5,c=3; 可以得出a%b=0,a%c=1;
int a=10,b; b=++a; 则b=11,a=11;
int a=10,b; b=a++; 则b=10,a=11;
int a=10,b; b=--a*2; 则b=18,a=9;
int a=10,b; b=a--*2; 则b=20,a=9;
作用:用于将表达式的值赋给变量
运算符术语示例结果=赋值a=ba=b+=加等于a+=ba=a+b-=减等于a-=ba=a-b*=乘等于a*=ba=a*b/=除等于a/=ba=a/b%=模等于a%=ba=a%b
作用:用于表达式的比较,并返回一个真值或假值
int a=1,b=2;
运算符术语示例结果==相等于a==b0!=不等于a!=b1大于a>b0<=小于等于a<=b1>=大于等于a>=b0
作用;用于根据表达式的值返回真值(1)或假值(0)
运算符术语示例结果!非!a如果a为假,则!a为真,如果a为真,则!a为假&&与a&&b如果a和b都为真,则结果为真,否则为假||或a||b如果a和b有一个为真,则结果为真,二者都为假时,结果为假
最基本的三种结构:顺序结构,选择结构,循环结构
4.1选择结构
4.1.1if语句
作用:执行满足条件的语句
if语句的三种形式
#includeusing namespace std;int main(){int a;cout << "输入a的值:";cin >> a;if (a > 5){cout << "a大于5"<
#includeusing namespace std;int main(){int a;cout << "输入a的值:";cin >> a;if (a > 5){cout << "a大于5"<
#includeusing namespace std;int main(){int a;cout << "输入a的值:";cin >> a;if (a > 15){cout << "a大于15"<10){cout << "a大于10,小于等于15"<5){cout << "a大于5,小于等于10" << endl;}else{cout << "a小于等于5" << endl;}system("pause");return 0;}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
#includeusing namespace std;int main(){int a;cout << "输入a的值:";cin >> a;if (a > 15){cout << "a大于15"<10){if (a > 13){cout << "a大于13,小于等于15" << endl;}else{cout << "a大于10,小于等于13" << endl;}}else if (a>5){cout << "a大于5,小于等于10" << endl;}else{cout << "a小于等于5" << endl;}system("pause");return 0;}
4.1.2三目运算符
作用:通过三目运算符实现简单的判断
语法:表达式a ? 表达式b:表达式c (如果表达式a的值为真,则执行b返回b的值;a为假,则执行c返回C的值)
int a=10,b=5,c; c=(a>b? a:b); 则c等于a的值,等于10;
int a=10,b=5; (a>b ? a:b)=20;则a=20,b=5;
4.1.3 switch语句
语法:
switch ( 变量表达式 )
{
case 常量1 :语句;break;
case 常量2 :语句;break;
...
case 常量n:语句;break;
default :语句;break;
}
#includeusing namespace std;int main(){int a;cout << "输入级别:";cin >> a;switch (a){case 3:cout << "优秀!";break;case 2:cout << "良好!";break;case 1:cout << "及格!";break;default:cout << "差!";break;}system("pause");return 0;}
4.2循环结构
4.2.1 while循环语句
作用:满足循环条件,执行循环语句
语法:while(循环条件){循环语句} :先条件,后语句
(只要循环条件为真,就执行循环语句)
#includeusing namespace std;int main(){int a = 1;while (a <= 10){cout << a << endl;a++;}system("pause");return 0;}
4.2.2 do.....while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句} while(循环条件); :先语句,后条件
(与while不同的是,会先执行一次循环语句,再判断条件)
#includeusing namespace std;int main(){int a = 1;do{cout << a << endl;a++;} while (a <= 10);system("pause");return 0;}
4.2.3for循环语句
作用:满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;} :表达式中间用分号隔开
#includeusing namespace std;int main(){int i;for (i = 1; i <= 10; i++){cout << i << endl;}system("pause");return 0;}
4.2.4嵌套循环
作用:在嵌套里面嵌套一层循环
eg:输出一个10*10的星星方格
#includeusing namespace std;int main(){int i;for (i = 1; i <= 10; i++){for (int j = 1; j <= 10; j++){cout<
4.3.1break语句
作用:用于跳出选择结构或者循环结构
break使用的时机:
4.3.2continue语句
作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
4.3.3goto语句(不推荐)
作用:可以无条件跳转语句
语法:goto 标记;(如果标记的名称存在,执行到goto语句时,会跳转到标记的位置)
#includeusing namespace std;int main(){cout << "aaaa" << endl;cout << "bbbb" << endl;goto AL;cout << "cccc" << endl;cout << "dddd" << endl;AL:cout << "eeee" << endl;system("pause");return 0;}
数组就是一个集合,里面存放了相同类型的数据元素
5.1.1一维数组的定义方式
三种定义方式
#includeusing namespace std;int main(){int a[5];for (int i=0; i < 5; i++){cout << a[i];}cout << endl;int b[5] = { 1, 2, 3, 4, 5 };for (int i = 0; i < 5; i++){cout << b[i];}cout << endl;int c[] = { 1, 2, 3, 4, 5 }; //自己会计算出数组的大小cout << endl; for (int i = 0; i < 5; i++){cout << c[i];}cout << endl;system("pause");return 0;}
5.1.2一维数组组名
一维数组名称的用途:
#includeusing namespace std;int main(){int a[5] = { 1, 2, 3, 4, 5 };cout << "数组长度为" << sizeof(a) << endl;cout << "数组个数为" << sizeof(a) / sizeof(int) << endl;cout << "a的地址为" << a << endl;cout << "a[0]的地址为" << &a[0] << endl;system("pause");return 0;}
就是在一维数组上多加了一个维度
5.2.1二维数组的定义方式
四种方法
#includeusing namespace std;int main(){ //数据类型 数组名[行数][列数];int a[2][2];for (int i = 0; i < 2; i++){for (int j = 0; j < 2; j++){cout << a[i][j];}}cout << endl; //数据类型 数组名[行数][列数]={{值1,值2},{值3,值4}};(推荐,更加直观)int b[2][2] = { { 1, 2 }, { 3, 4 } };for (int i = 0; i < 2; i++){for (int j = 0; j < 2; j++){cout << b[i][j];}}cout << endl; //数据类型 数组名[行数][列数]={值1,值2,值3,值4};int c[2][2] = { 1, 2, 3, 4 };for (int i = 0; i < 2; i++){for (int j = 0; j < 2; j++){cout << c[i][j];}}cout << endl; //数据类型 数组名[ ][列数]={值1,值2,值3,值4}; int d[][2] = { 1, 2, 3, 4 };for (int i = 0; i < 2; i++){for (int j = 0; j < 2; j++){cout << d[i][j];}}cout << endl;system("pause");return 0;}
5.2.2二维数组组名
#includeusing namespace std;int main(){int a[2][2] = { { 1, 2 }, { 3, 4 } };cout << "二维数组长度为" << sizeof(a) << endl;cout << "二维数组个数为" << sizeof(a) / sizeof(int) << endl;cout << "二维数组第一行个数为" << sizeof(a[0]) / sizeof(int) << endl;cout << "二维数组的行数为" << sizeof(a) / sizeof(a[0]) << endl;cout << "a的地址为" << a << endl;cout << "第一数的地址为" << &a[0][0] << endl;cout << "第一行的首地址为" << &a[0] << endl;cout << "第二行的首地址为" << &a[1] << endl;system("pause");return 0;}
作用:将一段经常使用的代码封装起来,减少重复代码
eg:返回值类型 函数名(参数列表)
{ 函数体;
return表达式(根据返回类型确定是否有)
}
int add(int a, int b){ return a + b;}
功能:使用定义好的函数
语法:函数名(参数)
#includeusing namespace std;int add(int a, int b){return a + b;}int main(){int a = 1, b = 2;cout << "a+b=" << add(a, b) << endl;system("pause");return 0;}
#includeusing namespace std;void add(int a, int b){a = 3;b = 4;cout << "add函数中a=" << a << endl;cout << "add函数中b=" << b << endl;}int main(){int a = 1, b = 2;add(a, b);cout << "main函数中a=" << a << endl;cout << "main函数中b=" << b << endl;system("pause");return 0;}
四种样式:
#includeusing namespace std;void wuwu(){cout << "无参无返" << endl;}void youwu(int a){a = 10;cout << "有参无返" << endl;}int wuyou(){int a = 11;return a;}int youyou(int a){a = 12;return a;}int main(){int a=0;wuwu();youwu(a);a=wuyou();cout << "有参无返a=" << a << endl;a = youyou(a);cout << "有参有返a=" << a << endl;system("pause");return 0;}
作用:告诉编译器函数名称及如何调用函数,函数的实际主体可以单独定义
void add(int a, int b);
void add(int a, int b);错误,只能声明一次
作用:让代码结构更加清晰
作用:可以通过指针间接访问内存
定义语法:数据类型 *变量名
int a=10;
int *p; //定义
p=&a; //指针保存a的地址
指针的使用
&:取地址运算符;(&a即代表取得了a的地址)
*:间接寻址运算符;(*p即代表显示p这个地址所存的数值)
所以p此时就等于a的地址,*p就代表把p这个地址存的数显示出来,即*p=a=10;
sizeof(int *); //等于4
sizeof(char *); //等于4
sizeof(double *); //等于4
不论什么类型的指针,所占的内存空间大小都是4
空指针:指针变量指向内存中编号为0的空间
用途初始化指针变量,但是空指针指向的内存不可访问
野指针:指针变量指向非法的内存空间
int *q = NULL; cout << *q; //错误空指针p不可访问
int *p=(int *)3000; cout << *p; //p为野指针,也不可访问
三种情况:
int n = 10,m = 20;
int const *a = &n;//*a = m; //错误常量指针,指针的值不能改变a = &m;
int * const b = &n;*b = m;//b = &m; //错误指针常量,指针的指向不能更改
int const * const c = &n;
作用:利用指针访问数组中元素
#includeusing namespace std;int main(){int b[3] = { 1, 2, 3 }; //指针int *a = b;cout << "第一个元素为" << *a << endl;a++;cout << "第一个元素为" << *a << endl;a++;cout << "第一个元素为" << *a << endl;system("pause");return 0;}
作用:利用指针作为函数参数,可以修改实参的值
#includeusing namespace std;void change(int *a,int *b){int swap = *a;*a = *b;*b = swap;}int main(){int a = 1, b = 2;change(&a, &b);cout << a << " " << b << endl;system("pause");return 0;}
#includeusing namespace std;void change(int *a,int len){for (int i = 0; i < len; i++){*a = i + 4;a++;}}int main(){int a[3] = { 1, 2, 3 };int len = sizeof(a) / sizeof(int);change(a,len);int *p = a;for (int i = 0; i < sizeof(a) / sizeof(int); i++){cout << *p << endl;p++;}system("pause");return 0;}
属于用户自定义的数据类型,允许用户存储不同的数据类型
语法:struct 结构体名{结构体列表成员};
三种创建变量的方式:
#include#includeusing namespace std;struct Student{int age;string name;}s;int main(){Student s1;s1.age = 10;s1.name = "张三";cout << s1.age << " " << s1.name << endl;Student s2 = { 11, "李四" };cout << s2.age << " " << s2.name << endl;s.age = 13;s.name = "黎明";cout << s.age << " " << s.name << endl;system("pause");return 0;}
作用:将自定义的结构体放入到数组中方便维护
语法:struct 结构体名 数组名[元素个数]={{},{},{}};
作用:利用指针访问结构体中的成员
可以看我另一篇博客:链接如下
https://blog.csdn.net/qq_46423166/article/details/106274521
作用结构体的成员可以是另一个结构体
#include#includeusing namespace std;struct Sorce{int math;int english;};struct Student{int age;string name;Sorce sorce;}s;int main(){Student s1;s1.age = 10;s1.name = "张三";s1.sorce.english = 80;s1.sorce.math = 90;cout << s1.age << endl;cout << s1.name << endl;cout << s1.sorce.english << endl;cout << s1.sorce.math << endl;system("pause");return 0;}
作用:将结构体作为参数向函数中传递(和普通的函数传参区别不大)
两种传参方式
void show(Student s1) //值传递;形参变,实参不变
void change(Student *s2) //地址传递;形参变,实参变
作用:用const来防止误操作
当结构体作为参数时,值传递是将实参的数据拷贝一份放到形参中,占用内存大,效率低;
所以推荐使用地址传递,但是为了防止地址传递时,实参被改变,所以引用const来防止被改变
void show(const Student *s1)