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

来源:互联网 发布:举报网络诈骗怎么写 编辑:程序博客网 时间:2024/04/30 05:20

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



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机不听使唤乱动怎么办 笔记本只有c盘怎么办 印章上印出的全是油怎么办 美工笔太粗怎么办 笔记本电脑速度太慢怎么办 电脑图形处理弱怎么办 戴尔笔记本电脑连不上网络怎么办 系统备份没有了怎么办 cad2014运行很慢怎么办 cad2007运行很慢怎么办 cad运2018行很慢怎么办 800*800图片太大怎么办 ps出现双箭头怎么办 衣服上面染上色怎么办 联想一体机忘记密码怎么办 三星a7手机黑屏怎么办 联想g40很卡怎么办 联想笔记本电脑卡机怎么办 笔记本电脑卡机了怎么办 笔记本电脑卡机动不了怎么办 ps变得很卡怎么办 戴尔笔记本卡了怎么办 戴尔电脑卡死了怎么办 win10显示器颜色不正常怎么办 没有密码重置盘怎么办 美术生英语不好怎么办 mbr分区安装不了怎么办 倒闭的共享单车怎么办 喷水壶喷嘴堵塞怎么办 电水壶按钮坏了怎么办 主机按钮坏了怎么办 手机系统删掉了怎么办 学习差的孩子怎么办 小猫生病不吃饭怎么办 深圳公寓被坑怎么办 跳芭蕾硬了怎么办 跳拉丁起反应怎么办 会认字不会写字怎么办 孩子不认识的字怎么办 小孩暑假没人带怎么办 放暑假了孩子怎么办