目录linux
第一部分 C++基础入门ios
1,C++初始windows
1.1变量数组
1.2常量函数
1.3关键字编码
1.4标识符命名规则spa
2,数据类型.net
2.1整型指针
2.2sizeof关键字code
做用:给一段指定的内存空间起名,方便操做这段内存。
语法:数据类型 变量名=初始值
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-1 int(整型) 4字节 -2^31——2^31-1 long(长整型) windows为4,linux下32位4,64位8 -2^31——2^31-1 long long(长长整型) 8字节 -2^63——2^63-1 (1字节 = 二进制8位 / 十进制3位 / 十六进制2位)
做用:利用sizeof关键字能够统计数据类型所占内存大小
语法:sizeof(数据类型/变量)
int a=10;
能够得出:sizeof(int)=4,sizeof(a)=4
做用:用于表示小数
浮点型变量分为两种
- 单精度float
- 双精度double
float 4字节 7位有效数字 double 8字节 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字符
现阶段咱们经常使用的转义字符有:\n(技术太差,我就用这一个);\\(想要输出'\',就须要用\\;cout<<"\\");\t正常8位
做用:用于表示一串字符
两种风格:
C风格字符串:char 变量名[]="字符串值"
C++风格字符串:string 变量名=“字符串值”(须要加上#include<string>头文件)
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=b | a=b |
+= | 加等于 | a+=b | a=a+b |
-= | 减等于 | a-=b | a=a-b |
*= | 乘等于 | a*=b | a=a*b |
/= | 除等于 | a/=b | a=a/b |
%= | 模等于 | a%=b | a=a%b |
做用:用于表达式的比较,并返回一个真值或假值
int a=1,b=2; | |||
运算符 | 术语 | 示例 | 结果 |
== | 相等于 | a==b | 0 |
!= | 不等于 | a!=b | 1 |
< | 小于 | a<b | 1 |
> | 大于 | a>b | 0 |
<= | 小于等于 | a<=b | 1 |
>= | 大于等于 | a>=b | 0 |
做用;用于根据表达式的值返回真值(1)或假值(0)
运算符 | 术语 | 示例 | 结果 |
! | 非 | !a | 若是a为假,则!a为真,若是a为真,则!a为假 |
&& | 与 | a&&b | 若是a和b都为真,则结果为真,不然为假 |
|| | 或 | a||b | 若是a和b有一个为真,则结果为真,两者都为假时,结果为假 |
最基本的三种结构:顺序结构,选择结构,循环结构
4.1选择结构
4.1.1if语句
做用:执行知足条件的语句
if语句的三种形式
#include<iostream> using namespace std; int main() { int a; cout << "输入a的值:"; cin >> a; if (a > 5) { cout << "a大于5"<<endl; } system("pause"); return 0; }
#include<iostream> using namespace std; int main() { int a; cout << "输入a的值:"; cin >> a; if (a > 5) { cout << "a大于5"<<endl; } else { cout << "a小于等于5"<<endl; } system("pause"); return 0; }
#include<iostream> using namespace std; int main() { int a; cout << "输入a的值:"; cin >> a; if (a > 15) { cout << "a大于15"<<endl; } else if (a>10) { cout << "a大于10,小于等于15"<<endl; } else if (a>5) { cout << "a大于5,小于等于10" << endl; } else { cout << "a小于等于5" << endl; } system("pause"); return 0; }
嵌套if语句:在if语句中,能够嵌套使用if语句,达到更精确的条件判断
#include<iostream> using namespace std; int main() { int a; cout << "输入a的值:"; cin >> a; if (a > 15) { cout << "a大于15"<<endl; } else if (a>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;
}
#include<iostream> using 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(循环条件){循环语句} :先条件,后语句
(只要循环条件为真,就执行循环语句)
#include<iostream> using 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不一样的是,会先执行一次循环语句,再判断条件)
#include<iostream> using namespace std; int main() { int a = 1; do{ cout << a << endl; a++; } while (a <= 10); system("pause"); return 0; }
4.2.3for循环语句
做用:知足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;} :表达式中间用分号隔开
#include<iostream> using 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的星星方格
#include<iostream> using namespace std; int main() { int i; for (i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { cout<<" * "; } cout << endl; } system("pause"); return 0; }
4.3.1break语句
做用:用于跳出选择结构或者循环结构
break使用的时机:
4.3.2continue语句
做用:在循环语句中,跳过本次循环中余下还没有执行的语句,继续执行下一次循环
4.3.3goto语句(不推荐)
做用:能够无条件跳转语句
语法:goto 标记;(若是标记的名称存在,执行到goto语句时,会跳转到标记的位置)
#include<iostream> using 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一维数组的定义方式
三种定义方式
#include<iostream> using 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一维数组组名
一维数组名称的用途:
#include<iostream> using 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二维数组的定义方式
四种方法
#include<iostream> using 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二维数组组名
#include<iostream> using 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;
}
功能:使用定义好的函数
语法:函数名(参数)
#include<iostream> using 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; }
值传递就是函数调用时实参将数值传入给形参
若是形参发生变化,并不会影响形参
#include<iostream> using 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; }
四种样式:
#include<iostream> using 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;
做用:利用指针访问数组中元素
#include<iostream> using 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; }
做用:利用指针做为函数参数,能够修改实参的值
#include<iostream> using 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; }
#include<iostream> using 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<iostream> #include<string> using 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<iostream> #include<string> using 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)