一、几种变量的范围(生命周期):
- 全局变量(所有函数外部):在文件中定义,在整个文件中有效;不但函数,任何一个角落都可以访问它。
- 局部变量(函数内部):局部变量的范围从定义时起,到整个函数结束。
- 块变量(在代码块中有效)
1.if块 2.switch块 3.循环块(for、while) 4.匿名块
定义变量的规则:让变量的生命周期尽量的短,以保证内存尽快释放。
二、数组:
1.定义
多个连续的同种数据类型数据的集合。
2.特点
1.同种数据类型; 2.多个; 3.连续内存块; 4.元素位置从0开始计算;
3.数组出现的必要性,及为什么要使用数组
将多个相同的数据类型的数值之间没有规律性的数据集合在一起,统一访问。这一点是多个同种类型的变量不能解决;
强调:C和C++中的数组,都不能通过数组本身,获取元素数;需要时只能通过计算得到; 任何类型数组的长度计算公式: int n = sizeof 数组名/ sizeof *数组名; int n = sizeof(数组名)/ sizeof(*数组名);
三、指针:
C++11-> C++14 -> C++17 -> C++20;
a)内存问题;变量使用内存,指针操作内存;无论哪种,无非读/写两类; i.单位:字节,记作byte; 无论哪种变量或数组,使用的内存大小都是字节的整数倍。 ii.在内存界,进位为1024;
- 1024个字节就是1Kb;
- 1024Kb = 1MB;
- 1024Mb = 1GB;
- 1024Gb = 1Tb;
- 024Tb = 1Pb;
b)1Gb = (102410241024) bytes 10亿多字节;我们认为内存是连续的,一个字节紧挨着一个字节,直到所有…, c)何为内存地址?每个字节从左到右,都有编号;编号用整数表示,这个编号就内存地址! d)当我们在C或C++中定义各种范围的变量时,编译器将空闲内存分配给这些变量,为程序使用; e)在C和C++中,用&vname,来得到这个变量的地址,就是它所分配到的内存块的地址,当一个变量占用多个字节的内存块,它的地址是哪个字节的编号呢?首字节的编号!地址格式:%p f)在一个数组,数组的地址为元素0的地址,元素0的地址就是这个元素的首字节地址;
a)静态数组;栈区中的数组,数据量少;数组名为常量指针; b)动态数组;堆区中的数组,数量量大; i.申请;new ii.检测;if(ptr==nullptr){ …; exit(1);}; iii.使用; 释放;delete, 只是释放指针变量指向的内存,指针变量不会删除。
四、C和C++的内存区域
- 栈区:编译器自动分配(不需要程序员操心干预);形参和局部变量、块变量
i.内存量少;10%左右;不适合大量内存使用; ii.分配效率高; - 堆区:由程序员申请和释放
i.内存量大;85%左右; ii.分配效率低; - 全局区:全局变量和静态变量;
- 常量区:常量,程序结束后由系统释放;const int x=10;
- 代码区:存放函数的二进制代码;
|