`
wx1569578408
  • 浏览: 71447 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C++二维数组的内存结构图与Java二维数组的内存结构图

 
阅读更多

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++二维数组编程实例.zip”提供了一系列可以直接运行的实例,旨在帮助学习者深入理解并掌握C++中二维数组的使用。下面我们将详细探讨二维数组的相关知识点。 1. **定义二维数组**: 在C++中,二维数组可以...

    将二维数组进行线性插值

    二维数组在计算机科学中,是一个多维数据结构,它由一串连续的内存位置组成,这些位置代表了按行和列排列的元素。每个元素可以通过一对索引(行索引和列索引)来访问。例如,一个二维数组可以表示为`arr[row][column...

    C++中二维数组与指针关系的剖析.pdf

    本文将基于《C++中二维数组与指针关系的剖析》一文的核心观点,深入探讨二维数组与指针之间的内在联系及其在实际编程中的应用。 #### 1. 二维数组与指针的基本概念 首先,我们回顾一下二维数组和指针的基础概念。*...

    VC将二维数组显示为图像

    6. 使用CreateDIBSection函数创建一个与位图兼容的内存DC,并将二维数组的数据复制到位图中。 7. 使用SelectObject函数将位图选入窗口的设备上下文。 8. 使用StretchBlt或BitBlt函数将位图绘制到窗口上。StretchBlt...

    数据结构与算法 一维数组-二维数组-三维数组

    在本主题中,我们将深入探讨一维数组、二维数组和三维数组的概念,以及如何使用模板来实现这些数据结构。这些基础知识在编程中至关重要,尤其是在处理大量数据时。 一维数组是最基础的数据结构之一,它是一个有序的...

    最小生成树(二维数组实现)

    二维数组是一种常见的表示图的方式,尤其在处理小规模数据时,相对于邻接矩阵和邻接表等更节省空间。在二维数组中,我们可以将每个节点看作数组的一个行或列,数组元素的值表示对应节点间边的权重。如果两个节点没有...

    c程序将表格数据读取到二维数组

    我们使用 `malloc` 函数来动态分配内存来构造二维数组。 接下来,我们使用 `fopen` 函数来打开 Excel 文件 `file1.cvs`,并使用 `fscanf` 函数来读取文件中的数据。我们使用 `while` 循环来读取文件中的每一行数据...

    将C++中二维数组转换为OpenCV中灰度图.zip

    需要注意的是,确保输入的二维数组尺寸与实际图像尺寸匹配,否则可能会导致内存错误。此外,如果原始二维数组的元素类型不是`unsigned char`,还需要进行适当的类型转换。 在处理实际项目时,你可能需要从其他来源...

    二维数组与指针关系剖析

    二维数组在C++中是一种非常重要的数据结构,它在编程中扮演着不可或缺的角色,尤其是在处理矩阵运算、图像处理以及各种网格数据时。二维数组本质上是一个一维数组的数组,可以理解为一个表格,其中每个元素又是一个...

    程序 二维数组

    二维数组在C++、Java、Python等编程语言中都有其特定的表示和操作方式。下面我们将深入探讨二维数组的定义、初始化、访问元素以及一些常见的操作。 1. 定义二维数组: 在C++中,可以这样定义二维数组: ```cpp int ...

    C++二维数组习题汇总含详细程序解答.pdf

    本文将详细解析五道关于C++二维数组的编程习题,涵盖寻找最大值、列求和、矩阵乘法以及绘制数字图案等应用场景。 1. **寻找二维数组中的最大值** 这道题目要求编写一个程序,从m行n列的二维数组中找出所有元素的...

    C++中实例三维动态数组建立

    释放内存的顺序与分配相反,先释放每个二维数组,然后再释放整个数组: ```cpp for (int i = 0; i ; ++i) { delete[] arr[i]; } delete[] arr; ``` 在实际应用中,我们可能还需要考虑其他因素,如异常安全性和...

    编写程序,找出一个二维数组的鞍点,即在当前行最大,当前列最小的元素,也可能没有鞍点。

    在编程领域,二维数组是一种常见的数据结构,它用于表示矩阵或表格形式的数据。鞍点是矩阵中的一个特殊位置,它的值在当前行中是最大的,同时在当前列中是最小的。这种元素在某些数学问题和算法分析中具有重要的意义...

    2_10.21二维数组上课代码.rar

    二维数组是编程中常见的一种数据结构,特别是在C++、Java、Python等编程语言中,它被广泛用于存储和处理多维度的数据。这个“2_10.21二维数组上课代码.rar”压缩包可能包含了与二维数组相关的教学示例代码,帮助学习...

    4认识二维数组.zip

    二维数组是编程语言中一种非常基础且重要的数据结构,它是一种多维数组,通常用于存储具有固定数量的行和列的数据。在这个“4认识二维数组”的主题中,我们将深入探讨二维数组的概念、定义、用途以及如何在不同编程...

    三维数组的实现

    对于三维数组,我们可以将其视为一个数组,其中每个元素又是一个二维数组,而这些二维数组中的每个元素又是一个一维数组(即整型变量)。这种结构非常适合处理具有三维特性的数据,例如三维坐标系中的点或者图像的...

    数据结构——二维数组PPT学习教案.pptx

    二维数组是数据结构中的一个重要概念,它是一种特殊的线性数据结构,...通过这个PPT学习教案,我们可以掌握二维数组的基本概念、数组类的实现以及如何在C++中操作二维数组,这对于理解和应用数据结构有着重要的意义。

    信息学奥寒一本通:第5章 数组(C++版)

    4. **二维数组**:在信息学竞赛中,二维数组常用于表示矩阵或棋盘。定义二维数组的方式为`int grid[row][col]`,访问元素时使用两个索引,如`grid[i][j]`。 5. **数组与指针的关系**:在C++中,数组名实际上是一个...

    第7次课-第9周-二维数组.rar

    二维数组是编程语言中一种非常基础且重要的数据结构,它在很多实际问题中都有广泛应用,例如图像处理、矩阵运算、游戏编程等。本课程聚焦于二维数组的概念、使用方法以及在不同编程语言中的实现。 首先,二维数组...

Global site tag (gtag.js) - Google Analytics