之前的笔记搬运
1. 什么是数组
数组的形态就是同类元素的集合, 并且结构是线性, 排序是连续的.
调试时如果发现可能是数组的错误时, 可以把参数分成一行行单步,
这样可以方便观察内存中数组中每个元素的变化, 如果数组的数据过多,
可以使用折半查找.
2. 数组的使用
数组定义时, 长度必须是常量或是常量表达式. (JAVA和C#支持是变量, 因为是二次编译)
“ [] ” 里的值, 定义时代表数组长度, 使用时代表运算下标
数组运算时, “ [] ” 中的值可以是常量, 变量, 各种表达式, 函数等,
但是最后的运算结果, 只可以是整数
数组的下标是如何运算的?
定义一维数组 : type ary [n];
下标运算公式: (int)ary + sizeof(type) * n
ary是常量, 是存放数组的首地址, 距离内存0地址的大小, 公式理解:
把指针型数据(ary )强转成int型 + 定义的数组类型大小(sizeof(type) ) *
整数型数据(n)
也就是所 n[ary] 一样不影响下标运算, 与 ary[n] 取出的值是一样的
下面是一维数组的玩法:
公式理解:
二维数组可以称为数组的数组
定义二维数组: type ary [n] [m]
下标的运算公式: (int) ary + sizeof( type[m] ) * n
- sizeof(type) * m
首先求出 第二维数组的大小 = sizeof(type) * 二维下标
再把指针型数据(ary )强转成int型 + 一维下标 * 第二维数组的大小
###
零散笔记:
1. 由于VS的监视窗口的表达式在单步过程中会执行, 这样会影响变量的值, 出现与实际运行不同的结果, 所以**监视窗口不要带有赋值或运算**的表达式
2. 逻辑恒定
1 | a and 1 = 0 a or 1 = 1 a and 0 = 0 |
- 递归的效率一定比循环低, 因为计算次数比循环大一倍, 且还有函数调用开销