面向过程
+ 三种循环
+ while(){}常用于不知道循环次数时,次数>=0,经常用法是while(1)、while(true),配合break使用;
+ for(;;){}常用于知道循环次数,次数>=0;
+ do{}while();至少做一次循环;
+ break和continue
+ break有两个用法
+ switch语句跳出case分支
+ 跳出本轮循环,后面循环都不做
+ continue一般用于跳出本次循环
+ 数组
+ 数组名是地址常量
+ 比如,int a[5]; int* p = a;
+ 数组不做初始化,里面是随机值。
+ int a[5];//{?,?,?,?,?}
+ 动态数组不能不指定动态开辟内存的个数。
+ int* a = new int[]{1,2,3,4,5};//错,先分配内存,再赋值
+ int* a = new int[5]{1,2,3,4,5};//对
+ int a[] = {1,2,3,4,5};//对,自动推导个数
+ 字符数组
+ char a[5];a = "xixi";//错,a依旧是字符常量
+ char a[5] = "12345"//错,越界
+ char a[5] = "1234"//对
+ char a[5] = {'1','2','3','4','\0'};//等价于第三种形式
+ 排序
+ 冒泡排序
```c++
const int N = 5;
int a[] = {5, 4, 3, 2, 1};
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
```
+ 选择排序
```c++
const int N = 5;
int a[] = {5, 4, 3, 2, 1};
for (int i = 0; i < N - 1; i++) {
int k = i;
for (int j = i + 1; j < N; j++) {
if (a[j] < a[k]) {
k = j;
}
}
int temp = a[k];
a[k] = a[i];
a[i] = temp;
}
```
+ 指针
+ 指针:带类型的地址
+ int a;//&a
+ char c; //&c
+ 指针变量:用于存储`带类型的地址`的变量
+ int* pa = &a;
+ char* pc = &c;
+ *pa, *pc
+ 应用:
+ 动态开辟内存
+ int* a = new int[5];
+ int* a = new int(5);
+ 交换函数
```c++
void swap(int* a,int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 5,b = 6;
swap(&a,&b);
return 0;
}
```
+ 多态
```c++
class Parent {
public:
virtual void show() {
cout << "这是基类show()方法";
}
};
class Son: public Parent {
public:
void show() {
cout << "这是子类show()方法";
}
};
void test() {
Parent *p = new Son;