数组

二维数组

  • 二维数组的初始化分为两种,一种是顺序初始化,一种是按行初始化
    • 所谓按顺序初始化就是先从左向右再由上而下地初始化,即第一行所有元素都初始化好以后再对第二行初始化。而按行初始化则是用一对大括号来表示每一行,跳过前一行没有初始化的元素,在行内从左向右地进行初始化。
    • int array1[3][2]={4,2,5,6}; 顺序初始化
    • int array2[3][2]={ {4,2},{5},{6} }; 按行初始化
    • 对于没有初始化的元素,则都是一个不确定的值。
  • 内存是依靠地址来确定内存中的唯一一个存储单元的,即只有一个参数。所以在内存中,所有的数据都是像一维数组那样顺序存储的。
    • 在内存中,先将二维数组的第一行按顺序存储,接着就是第二行的数据,然后是第三行的数据……右图(图7.4)所示的就是一个二维数组在内存中的存储情况。
  • 在某些情况下,不能使用二维数组,或者难以制造一个二维数组。二维数组在内存中的存储情况和一维数组是相同的,所以我们只好用一个一维数组来代替它了。一个二维数组元素a[x][y]在一维数组b中,是:
    a[x][y]=b[x*列数+y]

  • (未检查)主函数中没有初始化的元素一般为随机值,那个如果有初始化列表的话,后面默认还是零吗,对于二维数组来应该是的,在局部函数中,只要数组(一维或二维)带有任何的(即使是不完全的)初始化列表,数组就不会再是处于脏数据的状态,而是把其他未初始化的位置全部初始化为0. 但是在全局变量或static静态变量时,就不管有没有初始化列表,全部默认初始化为0.

一维数组

  • 静态数组int array[100] = {0};定义了数组array,并将数组元素全部初始化为0;
  • 静态数组int array[100] = {1};//定义了数组array,并将数组第一个元素初始化为1,后面99个元素初始化为0;
  • 静态数组int array[100] = {4,5}; 定义数组array,并初始化前两个元素为4,5,后面剩余元素初始化为0;
  • 动态数组int *p_array = new int[100]; delete []p_array; 分配了长度为100的数组array,并全部初始化为0;
  • 动态数组int *p_array = new int[100]{3,5}; delete []p_array; 前两个元素初始化为3和5,后面的原始初始化为0
------ The Happy Ending ------