1.变量——在运行过程中可以改变的 一般在栈stack 中存放
左值=右值
作用域:花括号内 ——————局部变量
生命周期:当前函数结束后 变量的内存 会自动回收
定义变量不能数字开头
不能使用未初始化的变量
1.1栈(stack)又名堆栈, 大小:1m-2m 通常由计算机自动分配,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
1.进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
1.2 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆是由程序员自己申请建立的。
堆支持以下的基本:
build:建立一个空堆;
insert:向堆中插入一个新元素;
update:将新元素提升使其符合堆的性质;
get:获取当前堆顶元素的值;
delete:删除堆顶元素;
heapify:使删除堆顶元素的堆再次成为堆。
2.常量——在运行过程中不可以改变 用 const 来定义常变量
在定义常变量的同时必须要进行初始化,具有以下性质:
(1)可以定义const常量,具有不可变性。
例如:const int Max=100; Max++会产生错误;
(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
例如: void f(const int i) { …} 编译器就会知道i是一个常量,不允许修改;
(3)可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!
如(1)中,如果想修改Max的内容,只需要:const int Max=you want;即可!
(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错;
例如: void f(const int i) { i=10;//error! }
宏定义 :#define a 10 定义了一个全局变量a 值为10
在预编译时候进行 进行宏替换 ,注释的替换,头文件的引入,宏展开不占运行时间,只占编译时间
**3.运算符
3.1 ():函数 强制类型转换 提升优先级
3.2 ~:按位取反
3.3 ^异或 :相同为0 不同为1
3. 4 |或 有1 为1
3.5 &与 同1为1
3.6 << 整体按位左移 相当于乘法 >>整体按位右移 相当于除法
3.7 B=a++ 先 b=a 执行语句后 a++ 为后置++
B=++a 先 a++ 后执行语句 b=a 为前置++
3.8 || 逻辑或 a||b||c 前面为真 后面 就不在计算了
3.9 指针 int p 定义了一个类型为 int 的 p 指针变量 里边放的是 变量的地址 *p里面放的是变量的值
*p=100 * 间接访问符
例子:
int k;
初始化的 int * p=&k; //这里是初始化,int 是一个类型,而不是解析p。
若有: int p=&k; //定义了int 的 p 指针变量 里边放的是 K的地址
p=5; //这里的不是表示初始化,是表示解析指针,即给k赋值。*p访问了K的值
3.10 Sizeof 是个运算符 求 当前变量 字节大小 在编译期间 进行判断变量类型
所有的指针 都为四个字节
Int a;
Char * p=(char *)&a ; a为Int 类 必须进行强制类型转换