摘要: 不同生存期数组的初始化、多维数组元素在内存上的排序、多维数组的下标访问、指针数组与二维数组在内存存储结构和下标访问上的区别,。
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 第一次编辑
本文详细探讨了C++中数组的初始化,包括静态和动态生存期数组的不同初始化方式。接着阐述了多维数组在内存中的排序及下标访问规则,并对比了指针数组与二维数组的内存结构和访问差异。通过对各种情况的分析,帮助读者深入理解C++数组的使用和内存管理。
311

被折叠的 条评论
为什么被折叠?



