摘要: 不同生存期数组的初始化、多维数组元素在内存上的排序、多维数组的下标访问、指针数组与二维数组在内存存储结构和下标访问上的区别,。
1.数组初始化
- 静态生存期的数组在程序运行前分配空间并默认初始化。
- 动态生存期的数组动态分配空间并动态初始化。
以下为动态生存期的数组初始化说明:
1.1声明时初始化:- 完全初始化:int a[3]={0,1,2};,数组变量a指向的数组为[0,1,2]。
- 部分初始化:int a[3]={3};,数组变量a指向的数组为[3,0,0]。(其他元素以默认值、默认构造函数初始化)
- 默认初始化:int a[3]={};,数组变量a指向的数组为[0,0,0]。(所有元素以默认值、默认构造函数初始化)
(声明后只能逐个初始化,未初始化的元素为随机值)
int a[3]; a[0]=0;
- 声明后数组指向的内存空间:(debug模式下cc表示为未初始化空间,在非debug模式下会表示为随机值)
- 首位元素初始化后数组指向的内存空间:
- 动态分配一个数组空间时,如果没有初始化,元素会是随机值。
- 动态分配时初始化的案例:int* a=new int[3]{1,2,3};
2.多维数组元素在内存上的排序
- 初始化一个多维数组:int a[3][3]={1,2,3,4,5,6,7,8,9};
- 其中:a[0][0]=1,a[0][1]=2,a[0][2]=3,a[1][0]=4,a[1][1]=5,a[1][2]=6…
- 多维数组指向的内存空间:
3.多维数组的下标访问
- 初始化一个多维数组:int a[3][3]={1,2,3,4,5,6,7,8,9};
- 不同数组下标访问返回的结果:(只有访问到最后一维下标才会返回元素对象,前面的维下标访问返回的只是数组首地址运算得到的地址)
- 解释:a=0x12ffa00,a[0]=0x12ffa00,a[0][0]=1,地址后面大括号表示的是地址指向的内容。
4.指针数组与二维数组的区别
- 初始化一个二维数组:
int a[3][3]={1,2,3,4,5,6,7,8,9};
- 初始化一个指针数组:
int* b[3];
b[0] = new int[3]{ 1,2,3 }; // 堆对象的分配时初始化的方式
b[1] = new int[3]{ 4,5,6 };
b[2] = new int[3]{ 7,8,9 };
4.1内存空间结构的区别
- 二维数组指向的内存空间:
- 指针数组指向的内存空间:(数组里面的指针指向另一个数组)
- 指针数组第一个指针元素指向数组的内存空间:
- 不同数组下标访问返回的结果:
- 两个数组通过下标访问的结果相同:a[i][j]=b[i][j]。
- 对于a[0][0]=b[0][0]=1,a[0]的值是通过二维数组a的首地址计算得到的,b[0]的值是通过读取数组b的第1个元素得到的。
2021.10.15 第一次编辑



