首页 > 其他分享 >二维数组的存储顺序、表示方法

二维数组的存储顺序、表示方法

时间:2023-09-14 19:13:20浏览次数:31  
标签:arr int 元素 存储 二维 数组 地址

  • 二维数组的存储顺序、表示方法

先说一维数组:

1. 数组首地址 也是 第一个元素的首地址

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main() {
 5     int arr[5] = {};
 6     cout << "arr = " << arr << endl;
 7     cout << "&arr[0] = " << &arr[0] << endl;
 8 
 9     return 0;
10 }

res:

  

可以看到 arr 和 &arr[0] 的内容一样。

 

2. 下一个元素的地址为 前一个元素的地址+元素类型大小

经试验,下一个元素的地址为 前一个元素的地址+1,编译器会自动推导元素类型大小

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main() {
 5     int arr[5] = {1,2,3,4,5};
 6     cout << "&arr[0] = " << &arr[0] << endl;    // 数组首地址; 第一个元素的地址
 7     cout << "*(&arr[0]+4) = " << *(&arr[0] + 4) << endl;    // 第五个元素的值
 8     cout << "&arr[0]+4 = " << &arr[0] + 4 << endl;    // 第五个元素的地址
 9     cout << "&arr[1] = " << &arr[1] << endl;    // 第二个元素的地址
10     cout << "*(&arr[0]+1) = " << *(&arr[0] + 1) << endl;    // 第二个元素的值
11 
12     return 0;
13 }

res:

  

 

二维数组:

存储顺序:

假设有一个二维数组定义如下:

int iArray[2][3]={};

那么它的存储结构如下:

  

二维数组按行顺序存储(先第1行,再第2行、第3行...)

再看一个示例:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int main() {
 5     int arr[2][3] = {
 6         {1,2,3},
 7         {4,5,6},
 8     };
 9     cout << "&arr[0][0] = " << &arr[0][0] << endl;
10     cout << "&arr[0] = " << &arr[0] << endl;
11     cout << "arr[0] = " << arr[0] << endl;
12     cout << "&arr[1][0] = " << &arr[1][0] << endl;
13     cout << "&arr[1] = " << &arr[1] << endl;
14     cout << "arr[1] = " << arr[1] << endl;
15 
16     return 0;
17 }

res:

  

arr[0] == &arr[0] == &arr[0][0]

arr[1] == &arr[1] == &arr[1][0],依次类推...

arr[n] 或者 &arr[n] 就是 arr[n][0] 元素的地址

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)

标签:arr,int,元素,存储,二维,数组,地址
From: https://www.cnblogs.com/wjjgame/p/17703207.html

相关文章

  • 【Java入门】交换数组中两个元素的位置
    在Java中,交换数组中的两个元素是基本的数组操作。下面我们将详细介绍如何实现这一操作,以及在实际应用中这种技术的重要性。一、使用场景在编程中,我们经常需要交换数组中的两个元素。例如,当我们需要对数组进行排序或者在某种算法中需要交换元素的位置。这种操作在数据结构、算法、......
  • 天翼云存储资源盘活系统HBlock,全面释放企业数据价值
    9月6日,天翼云与科技媒体InfoQ联合举办的以“存储难题新解法,揭秘极致易用的HBlock”为主题的线上技术分享会圆满落幕。天翼云国际业务事业部研发专家武志民与存储产品线总监魏玮以“天翼云存储资源盘活系统HBlock,深挖独创技术亮点与实战演练”为主题,分享了HBlock在安装部署、数据可......
  • 【Java入门】交换数组中两个元素的位置
    在Java中,交换数组中的两个元素是基本的数组操作。下面我们将详细介绍如何实现这一操作,以及在实际应用中这种技术的重要性。一、使用场景在编程中,我们经常需要交换数组中的两个元素。例如,当我们需要对数组进行排序或者在某种算法中需要交换元素的位置。这种操作在数据结构、算法......
  • Mysql存储引擎,你了解几个?
    引言MySQL是一种流行的关系型数据库管理系统(RDBMS),它支持多种不同的数据库引擎。数据库引擎是用于存储、管理和检索数据的核心组件,它们直接影响着数据库的性能、可靠性和功能,接下来本文介绍下一些常见的MySQL数据库引擎。存储引擎InnoDB引擎InnoDB是MySQL默认的事务性数据库引......
  • 可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫
    P8946TheLostSymbol这种类型的dp的特点就是大部分转移形如\(f(i,j)\rightarrowf(i+1,j+1)\)之类的,并且当以上转移出现时原数组被清空,这就可以用一个deque来维护,然后对于全局赋值/全局加,需要对每个位置维护一个时间戳,并记录上一次赋值/加是什么时候,以便标记下传。(貌似......
  • Jquery 将 JSON 列表的 某个属性值,添加到数组中
    jquery将JSON列表的某个属性值,添加到数组中如果你有一个JSON列表,并且想要将每个对象的某个属性值添加到数组中,你可以使用jQuery的$.each()函数来遍历JSON列表,并获取所需的属性值。以下是一个示例代码:varjsonList=[{"name":"John","age":30,"city":"NewYork......
  • YashanDB混合存储大揭秘:行式存储设计如何为高效TP业务保驾护航(上)
    上一篇文章《揭秘YashanDB融合存储引擎》https://mp.weixin.qq.com/s/yipJcEAH3fVA-_hnUvOiKA从存储结构、事务引擎、高可用等方面介绍了YashanDB存储引擎的整体架构。本篇为大家详细解读YashanDB行式存储技术。背景数据库底层组织数据的方式主要分为行式存储和列式存储两大类。Yas......
  • YashanDB混合存储大揭秘:行式存储设计如何为高效TP业务保驾护航
    接上篇内容插入性能优化YashanDB行式存储主要从提供并发度、批量化处理以及减少日志产生三方面对事务处理过程中的插入性能进行了优化:1提高并发度单线程插入的速度是有限的,在资源充足的场景下,我们希望通过增加线程来提高导入数据的速度。由于数据块不能同时写入,如果两个线程要在同......
  • nacos服务多级存储模型
       ......
  • 计算数组中最大值
    snum="345,231,56,786,1100,356,1200,300,685,111,134,765"functionGetMax(str)num=split(str,",")max=num(0)forii=0toubound(num)ifcint(num(ii))>cint(max)thenmax=num(ii)response.Write"num="&num(ii)&&......