构造二维数组矩阵 java_C++二维数组的内存结构图与Java二维数组的内存结构图

Java二维数组的内存结构图:

今天看了个视频,说Java中二维数组是这样的:java中的二位数组是按维存储的。

724131a617339c00fefae88a4adceb1a.png

在Java中是可以这样的,二维数组有三种定义格式!

定义格式1:

ea079f8f1d08fef58082b44e5442dd59.png

定义格式1的内存图:

5f13934e4e2b5c0d97e5916e092f4e71.png

定义格式2:

f084b899e09b8b93f67aed8cd02ff802.png

定义格式2的内存结构图:

5da1c3d443588a7638bd32873fe385d4.png

定义格式3:

f4a874ff0340bc32218f8f83eb7fc464.png

定义格式3内存图:

65272de172e36b407e5cf1ac6c3a1eda.png

C语言二维数组的内存结构图:

突然,感觉和自己脑海中C的不一样。还专门去看了下C的。

void main()

{

int a[3][2];

cout << a <

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;

}

运行结果:

1d2c977511ede80adfc51c5e0aac19cb.png

也就是说,C语言的二维数组确实是下面这样:

cb39c804fd0ac4e59f82a1e8ddeea8c7.png,C语言的二维数组是连续一维存储的。

再详细看一下:

#include

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;

}

d11d56526b1085feafd961240ee27166.png

附录:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值