专题
-
动态内存分配的问题
-
传统数组的缺点
1>数组长度必须事先指定,且只能是长整数,不能是变量
例子:int a[5];//OK
int len = 5; int a[len]; // error
2>传统形式定义的数组,该数组的内存程序员无法手动释放
在一个函数运行期间,系统为该函数中数组所分配的空间会一直存在,直到该函数运行完毕时,数组的空间才会被系统释放
3>数组的长度不能在函数运行的过程动态的扩充或者缩小(数组的长度一旦定义,其长度就不能再更改)
4>A函数定义的数组,在A函数运行期间可以被其他函数使用,但运行完毕之后,A函数中的数组将无法被其他函数使用
传统定义的数组无法跨函数使用
-
为什么需要动态分配内存
动态数组很好的解决了传统数组的这4个缺陷
传统数组也叫静态数组
-
动态内存分配举例------动态数组的构造
/*
2020年6月14日16:56:07
*/
-
静态内存和动态内存的比较
1. 静态内存是系统自动分配,由系统自动释放,静态内存是在栈分配的
2. 动态内存是由程序员手动分配,手动释放,动态内存是在堆分配的 -
跨函数使用内存的问题
-
枚举
-
什么是枚举
把一个事物所有可能的取值一一列举出来
-
-
枚举的优缺点
代码更安全但是书写起来比较麻烦
进制转换
16进制 0---9 A --- F 10(16) 11(17) -------1F 20 ---- 2F
8进制 0 1 2 3 4 5 6 7 逢8进1, 8->10 9->11 10->12
在汇编中:在数字后面加字母B表示二进制,加字母O表示八进制,加字母D表示十进制,加字母H表示十六进制
预备知识:
小数除以大数,则商为零,余数是小数本身
十进制--->二进制 除2取余 倒排
十进制转R进制: 除R取余 倒排
R进制转十进制:
一个十六进制位有16种状态,需要4个二进制位才能表示(2^4 = 16)
二进制转十六进制:
方法:从右到左,四位一段,分别转化,不够四位的补零
例如:(01011110)2——>(0010,1110)2左补一个零------>(2E)16
0001>>>1
0010>>>2
0011>>>3
0100>>>4
0101>>>5
0110>>>6
0111>>>7
1000>>>8
1001>>>9
1010>>>A
1011>>>B
1100>>>C
1101>>>D
1110>>>E