CPP中volatile关键字介绍
简介 volatile 意为:不稳定的,易变的。该关键字用于提醒编译器它所修饰的变量的值会时刻改变。通常我们不会经常使用该关键字修饰变量,那么这个时候为了优化IO性能,程序可能会从该变量的寄存器中取值而不会从它的内存地址取值,因为访问寄存器的性能快过ram,但如果数据会频繁变化,寄存器中的值和该变量的内存地址中的值就并不一定完全相同,这样就会导致数据不一致,容易出现问题,且难以发现。
用法volatile <data-type> <var-name>;
volatile int a = 0;
示例 比如我想用整形变量定义一个flag,而该flag会一直变化,当达到某个条件会断开循环,如果不加volatile关键字,就容易导致数据不一致,循环可能不会像预期的那样运行
1234567#include <iostream>int flag = 0;int main(){ while(flag != 0){ func1(); } func2(); return 0;}
1234567# ...
C++ short短整型
介绍short短整形可以用于表示整形数据,但是它与普通的整形并不一样。
大小不一样:short是2字节,int是4字节
最大最小值不一样:short是[-32768,32767],int是[-2147483648,2147483647]
在使用的时候,如果能预先知道数值小,可以用short型节省空间
如果超出了short型的范围,数值就会不准确
使用你可以用short int或short来定义短整形,它们两个作用都是一样的
12short int a = 10;short b = 10;
class与struct的区别
C++保留了C语言struct关键字的所有内容,并作了一些延伸
struct在C语言中不可被继承,在C++中可以被继承
class是对象类型,struct是值类型
class通常用作对象和类的创建,struct通常用作数据结构的创建,例如链表,栈等数据结构
class可用作创建模板,struct则不行,否则会报错
class可存放函数声明,struct不能
class在没有成员访问权限修饰符的情况下默认访问权限为private类型,而struct默认为public类型
struct在C++中可以调用构造函数,可以使用{}为成员赋值,但在赋值时,必须统一访问权限为public,不能出现其它访问权限
CET4高频词汇
alter v. 改变,改动,变更
burst vi. n. 突然发生,爆裂
dispose vi. 除掉;处置;解决;处理(of)
blast n.爆炸;气流 vi.炸
consume v. 消耗,耗尽
split v. 劈开;分裂 a.裂开的
spit v. 吐(唾液等);唾弃
spill v. 溢出,溅出,倒出
slip v. 滑动,滑落;忽略
slide v.滑落 n. 滑动;幻灯片
bacteria n. 细菌
breed n. 种,品种 v. 繁殖,
budget n. 预算 v. 编预算,
candidate n. 候选人
campus n. 校园
liberal a. 慷慨的;丰富的;自由的
transform v. 转变,变革;
transmit v. 传播,播送;传递
transplant v. 移植
transport vat. 运输,运送 n. 运输,运输工具
shift v. 转移;转动;转变
vary v. 变化,改变,使多样化
vanish vi. 消灭,不见
swallow v. 吞下,咽下 n. 燕子
...
C语言获取数组长度方法
介绍C语言和C++本身不像其它高级语言那样提供简便的获取数组长度的办法,这需要我们自己造轮子,但也不算难,以下是一些方法可以参考。
注意:若数组存放在堆区,则不能用这种方法获取数组长度,数组存放在栈区的可以。
堆区申请的通常是自己创建的,栈区的是系统创建的
方法一:sizeof()sizeof()用于获取数据类型的大小,而在获取数组长度时,并不能直接sizeof(arr),这样只能获取数组全部数据加起来的大小,
例如一个int型的数组,通过sizeof(int)后可知一个int占4个字节,数组长度为10,若直接sizeof该数组,得到的结果应为4*10=40,显然不符合我们的要求。
但是如果我们能够知道该数组的数据类型又能知道一个数据类型所占的大小还知道该数组的总大小,就可以直接求出该数组的长度,公式为:
\frac{所有数据总大小}{单个元素大小} = length因此,有以下代码:
1234567#include <stdio.h>void main(){ int arr[] = {5,1,3,6,8}; // 长度为5 in ...
冒泡排序法
介绍及原理冒泡排序法具有稳定性,且应用场景广泛且普遍。其主要原理是通过对一个数组进行两次循环迭代,最外层的循环迭代决定了其检测的次数,里层的循环迭代用于判断两个相邻的数的大小,如果前一个数大于它的后一个数,则两数交换位置,依次循环,直到排序完毕。
时间复杂度: O(n^2)
示例注:示例采用C语言,C++同样适用
代码如下:
1234567891011121314151617181920212223242526272829#include <stdio.h>void bubble_sort(int arr[], int len) { int temp; //临时存储数据 for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { //如果前一项大于后一项,执行交换操作 temp = arr[j]; arr[j] = arr[j + 1]; arr[ ...
在Markdown中实现思维导图
注:必须使用Markdown文件!插入代码块,按以下代码格式操作
123456graph LRA[方形] -->B(圆角) B --> C{条件a} C -->|a=1| D[结果1] C -->|a=2| E[结果2] F[横向]
将ABC换成内容就可以了
C++和C语言之动态内存
C++重要概念1、栈内存函数内部声明的变量占用的内存
2、堆内存程序未使用的内存,可用于动态分配内存
动态内存程序在运行时动态分配内存,有时我们不知道我们需要分配多少内存,而是到了运行时才能知道,这时就需要动态分配内存,而其它的分配方式叫静态分配内存。面对需求灵活性高的程序,动态内存的地位极为重要。
若需要查看应用场景示例,请在本文右侧导航栏跳转至“应用场景”。
正题new 和 delete 运算符new 运算符用于为变量申请内存,其格式为
1<var-name> = new <data-type>;
例:
12char *c[];c = new char[20];
即为char指针变量c申请缓冲区大小为20个字节的内存空间,如果在实际开发中,数据大小超过了该缓冲区就会导致缓冲区溢出报错。
还有第二种用法:
1int *num = new num();
写了括号但不写其值,这种用法即是开辟一个内存空间并初始化为0
delete 运算符delete 运算符通常用于将已经使用完了的内存或不用的内存释放,根据需求合理释放内存是一个很好的习惯,不及时释放内存在小型项 ...
C语言define作用介绍
本篇文章同样适用于C++
概述define预处理器,通常可以预定义常量,如经典预定义之圆周率:
1#define PI 3.1415926
PI 为常量名称,3.1415926 为常量内容
什么是预定义顾名思义,即为预先定义。在C语言编译运行之前的预处理阶段会开始处理该预定义常量,听起来有些拗口,请看以下例子:
代码编写阶段:
12345#include <stdio.h> //C标头#define RECT (20*20) //定义一个RECT常量,其值为400void main(){ printf(RECT);}
进入预处理阶段(未进入编译运行阶段):
12345#include <stdio.h> //C标头#define RECT (20*20) //定义一个RECT常量,其值为400void main(){ printf(400);}
可以看到在预处理阶段,预处理器会自动运算20*20的结果并将其RECT常量自动转换为运算值。
注意:在define中若有数学运算必须使用()括起
像这种写法就是错误的: ...