C++ 数组初始化 多维数组 指针数组

摘要: 不同生存期数组的初始化、多维数组元素在内存上的排序、多维数组的下标访问、指针数组与二维数组在内存存储结构下标访问上的区别,。


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]=1a[0][1]=2a[0][2]=3a[1][0]=4a[1][1]=5a[1][2]=6
  • 多维数组指向的内存空间:在这里插入图片描述

3.多维数组的下标访问

  • 初始化一个多维数组:int a[3][3]={1,2,3,4,5,6,7,8,9};
  • 不同数组下标访问返回的结果:(只有访问到最后一维下标才会返回元素对象前面的维下标访问返回的只是数组首地址运算得到的地址
    在这里插入图片描述
  • 解释:a=0x12ffa00a[0]=0x12ffa00a[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]=1a[0]的值是通过二维数组a的首地址计算得到的,b[0]的值是通过读取数组b的第1个元素得到的。

END

2021.10.15 第一次编辑

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值