数组

  1. 数组为什么是从0开始
    数组是申请连续的空间 通过随机读取可以得到结果
int a[] = {1,2,3}

上面示例数组假设baseaddr 1001 每一项占用1 则 1001 1002 1003 这样的排列
随机读取的公式是 a[i] = baseaddr+itype_size
读取a[1] 公式套入 a[1] = 1001+1x1=1002
如果是1开始就需要a[i] = baseaddr+(i-1)
type_size,相当于多做一次减法

  1. 数组越界问题(java语言有检测机制)
i=0;
arr[3]={0}
for(;i<=3;i++){
  arr[i]=0
  print("test")
}

上面代码i<=3则处理,会出现死循环,变量入栈是高位到低位,可以知道栈数据
x0001 a[0]
x0002 a[1]
x0003 a[2]
x0004 i=0
当arr[3]时刚好对应计算可以得到 x0001+3*1=x0004,刚好是i的值 ,arr[3]=0,就是把i设置为0,循环继续。

  1. 随机读取O(1)
  2. 插入数据
    一般情况 插入末尾最好是O(1),插入头要最差是O(n),平均情况(1+2+...+n)/n=O(n)
  3. 删除数据
    一般情况也是类似插入

你可能感兴趣的:(数组)