Java二维数组的内存结构图:
今天看了个视频,说Java中二维数组是这样的:java中的二位数组是按维存储的。
在Java中是可以这样的,二维数组有三种定义格式!
定义格式1:
定义格式1的内存图:
定义格式2:
定义格式2的内存结构图:
定义格式3:
定义格式3内存图:
C语言二维数组的内存结构图:
突然,感觉和自己脑海中C的不一样。还专门去看了下C的。
void main()
{
int a[3][2];
cout << a <<"\t"<< &a << endl<<endl;
cout << a[0] << "\t" << a[1] << "\t" << a[2] << endl << endl;
cout << &a[0][0] << "\t" << &a[0][1] << endl << endl;
cout << &a[1][0] << "\t" << &a[1][1] << endl << endl;
cout << &a[2][0] << "\t" << &a[2][1] << endl << endl;
}
运行结果:
也就是说,C语言的二维数组确实是下面这样:
,C语言的二维数组是连续一维存储的。
再详细看一下:
#include<iostream>
using namespace std;
void main()
{
int a[3][3] = { 1, 5, 9, 15, 28, 44, 65, 88, 99 };
cout << "各元素:" << endl;
cout << a[0][0] << " " << a[0][1] << " " << a[0][2] << " " << endl;
cout << a[1][0] << " " << a[1][1] << " " << a[1][2] << " " << endl;
cout << a[2][0] << " " << a[2][1] << " " << a[2][2] << " " << endl;
cout << "\n各元素地址:" << endl;
cout << &a[0][0] << " " << &a[0][1] << " " << &a[0][2] << " " << endl;
cout << &a[1][0] << " " << &a[1][1] << " " << &a[1][2] << " " << endl;
cout << &a[2][0] << " " << &a[2][1] << " " << &a[2][2] << " " << endl;
cout << "\na[0]:" << a[0] << " &a[0][0]: " << &a[0][0] << endl; //a[0] <==> &a[0][0]
cout << "a[1]:" << a[1] << " &a[1][0]: " << &a[1][0] << endl; //a[1] <==> &a[1][0]
cout << "a[2]:" << a[2] << " &a[2][0]: " << &a[2][0] << endl; //a[2] <==> &a[2][0]
cout << "\na[0]+1:" << a[0]+1 << " &a[0][1]:" << &a[0][1] << endl; //a[0]+1 <==> &a[0][1]
cout << "a[1]+1:" << a[1]+1 << " &a[1][1]:" << &a[1][1] << endl; //a[1]+1 <==> &a[1][1]
cout << "a[2]+1:" << a[2]+1 << " &a[2][1]:" << &a[2][1] << endl; //a[2]+1 <==> &a[2][1]
cout << "\n&a:" << &a << endl; //&a:数组的首地址
cout << "&a +1:" << &a + 1 << endl; //注意步长:直接跳了一个二维数组
cout << "\na+0:" << a << endl; //第0行的首地址
cout << "a+1:" << a + 1 << endl; //第1行的首地址
cout << "a+2:" << a + 2 << endl; //第2行的首地址
cout << endl;
cout << "(*a)[2]:" << (*a)[2] << endl;
cout << "(*a +1)[2]:" << (*a + 1)[2] << endl;
cout << "*a[2]:" << *a[2] << endl;
cout << endl;
cout << "*a:" << *a << endl;
cout << "*(a+1):" << *(a + 1) << endl;
cout << "*(a + 1) + 2:" << *(a + 1) + 2 << endl;
cout << "*(*(a+1)+2):" << *(*(a + 1) + 2) << endl;
}
附录:
java二维数组的遍历:
public class Main {
public static void main(String[] args) {
int[][] arr = { { 1, 2, 3 }, { 4, 5 }, { 6 } };
for (int row = 0; row < arr.length; row++) { // 外层循环:二维数组的长度,也就是一维数组的个数
for (int col = 0; col < arr[row].length; col++) { // 内层循环:某一维数组的长度
System.out.print(arr[row][col] + " ");
}
System.out.println();
}
}
}
打印结果:
1 2 3
4 5
6
转载于:https://my.oschina.net/u/3415127/blog/875492
分享到:
相关推荐
本资源“C++二维数组编程实例.zip”提供了一系列可以直接运行的实例,旨在帮助学习者深入理解并掌握C++中二维数组的使用。下面我们将详细探讨二维数组的相关知识点。 1. **定义二维数组**: 在C++中,二维数组可以...
二维数组在计算机科学中,是一个多维数据结构,它由一串连续的内存位置组成,这些位置代表了按行和列排列的元素。每个元素可以通过一对索引(行索引和列索引)来访问。例如,一个二维数组可以表示为`arr[row][column...
本文将基于《C++中二维数组与指针关系的剖析》一文的核心观点,深入探讨二维数组与指针之间的内在联系及其在实际编程中的应用。 #### 1. 二维数组与指针的基本概念 首先,我们回顾一下二维数组和指针的基础概念。*...
6. 使用CreateDIBSection函数创建一个与位图兼容的内存DC,并将二维数组的数据复制到位图中。 7. 使用SelectObject函数将位图选入窗口的设备上下文。 8. 使用StretchBlt或BitBlt函数将位图绘制到窗口上。StretchBlt...
在本主题中,我们将深入探讨一维数组、二维数组和三维数组的概念,以及如何使用模板来实现这些数据结构。这些基础知识在编程中至关重要,尤其是在处理大量数据时。 一维数组是最基础的数据结构之一,它是一个有序的...
二维数组是一种常见的表示图的方式,尤其在处理小规模数据时,相对于邻接矩阵和邻接表等更节省空间。在二维数组中,我们可以将每个节点看作数组的一个行或列,数组元素的值表示对应节点间边的权重。如果两个节点没有...
我们使用 `malloc` 函数来动态分配内存来构造二维数组。 接下来,我们使用 `fopen` 函数来打开 Excel 文件 `file1.cvs`,并使用 `fscanf` 函数来读取文件中的数据。我们使用 `while` 循环来读取文件中的每一行数据...
需要注意的是,确保输入的二维数组尺寸与实际图像尺寸匹配,否则可能会导致内存错误。此外,如果原始二维数组的元素类型不是`unsigned char`,还需要进行适当的类型转换。 在处理实际项目时,你可能需要从其他来源...
二维数组在C++中是一种非常重要的数据结构,它在编程中扮演着不可或缺的角色,尤其是在处理矩阵运算、图像处理以及各种网格数据时。二维数组本质上是一个一维数组的数组,可以理解为一个表格,其中每个元素又是一个...
二维数组在C++、Java、Python等编程语言中都有其特定的表示和操作方式。下面我们将深入探讨二维数组的定义、初始化、访问元素以及一些常见的操作。 1. 定义二维数组: 在C++中,可以这样定义二维数组: ```cpp int ...
本文将详细解析五道关于C++二维数组的编程习题,涵盖寻找最大值、列求和、矩阵乘法以及绘制数字图案等应用场景。 1. **寻找二维数组中的最大值** 这道题目要求编写一个程序,从m行n列的二维数组中找出所有元素的...
释放内存的顺序与分配相反,先释放每个二维数组,然后再释放整个数组: ```cpp for (int i = 0; i ; ++i) { delete[] arr[i]; } delete[] arr; ``` 在实际应用中,我们可能还需要考虑其他因素,如异常安全性和...
在编程领域,二维数组是一种常见的数据结构,它用于表示矩阵或表格形式的数据。鞍点是矩阵中的一个特殊位置,它的值在当前行中是最大的,同时在当前列中是最小的。这种元素在某些数学问题和算法分析中具有重要的意义...
二维数组是编程中常见的一种数据结构,特别是在C++、Java、Python等编程语言中,它被广泛用于存储和处理多维度的数据。这个“2_10.21二维数组上课代码.rar”压缩包可能包含了与二维数组相关的教学示例代码,帮助学习...
二维数组是编程语言中一种非常基础且重要的数据结构,它是一种多维数组,通常用于存储具有固定数量的行和列的数据。在这个“4认识二维数组”的主题中,我们将深入探讨二维数组的概念、定义、用途以及如何在不同编程...
对于三维数组,我们可以将其视为一个数组,其中每个元素又是一个二维数组,而这些二维数组中的每个元素又是一个一维数组(即整型变量)。这种结构非常适合处理具有三维特性的数据,例如三维坐标系中的点或者图像的...
二维数组是数据结构中的一个重要概念,它是一种特殊的线性数据结构,...通过这个PPT学习教案,我们可以掌握二维数组的基本概念、数组类的实现以及如何在C++中操作二维数组,这对于理解和应用数据结构有着重要的意义。
4. **二维数组**:在信息学竞赛中,二维数组常用于表示矩阵或棋盘。定义二维数组的方式为`int grid[row][col]`,访问元素时使用两个索引,如`grid[i][j]`。 5. **数组与指针的关系**:在C++中,数组名实际上是一个...
二维数组是编程语言中一种非常基础且重要的数据结构,它在很多实际问题中都有广泛应用,例如图像处理、矩阵运算、游戏编程等。本课程聚焦于二维数组的概念、使用方法以及在不同编程语言中的实现。 首先,二维数组...