摘要: 不同生存期数组的初始化、多维数组元素在内存上的排序、多维数组的下标访问、指针数组与二维数组在内存存储结构和下标访问上的区别,。
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]
。(所有元素以默认值、默认构造函数初始化)
1.2声明后初始化:
(声明后只能逐个初始化,未初始化的元素为随机值)
int a[3];
a[0]=0;
- 声明后数组指向的内存空间:(debug模式下cc表示为未初始化空间,在非debug模式下会表示为随机值)
- 首位元素初始化后数组指向的内存空间:
1.3动态分配时初始化:
- 动态分配一个数组空间时,如果没有初始化,元素会是随机值。
- 动态分配时初始化的案例:
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内存空间结构的区别
- 二维数组指向的内存空间:
- 指针数组指向的内存空间:(数组里面的指针指向另一个数组)
- 指针数组第一个指针元素指向数组的内存空间:
4.2下标访问的区别
- 不同数组下标访问返回的结果:
- 两个数组通过下标访问的结果相同:
a[i][j]
=b[i][j]
。 - 对于
a[0][0]
=b[0][0]
=1
,a[0]
的值是通过二维数组a
的首地址计算得到的,b[0]
的值是通过读取数组b
的第1个元素得到的。
2021.10.15 第一次编辑