
1、二维数组的第一个参数是行,第二个参数是列。二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2],其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。
2、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C是高级语言:它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行 *** 作,而这三者是计算机最基本的工作单元。C语言一共只有40个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行 *** 作,而这三者是计算机最基本的工作。
3、在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。
4、二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。
5、二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称变方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。
6、二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按"行优先顺序"存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) n + (j − q)) t 。按"列优先顺序"存储时,地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) m + (i − p)) t 。存放该数组至少需要的单元数为(m-p+1) (n-q+1) t 个字节。
真正的二维数组只有string[,] arr = new string[12, 31] 没有第二种至于那个教科书上经常列出来的所谓交叉数组
比如 string[][] ary = new string[5][];
开始我还真以为是微软弄出来什么新的数据结构,后来一想,我靠,这个不就是string[] 类型的一维数组吗,事实上也确实是这样的,就是写法上有点怪异
我一直觉得 string[][] ary = new string[][5]; 这样写才比较合理
java中使用 [][] 来定义二维数组,定义数组时也可同时初始化。
两种初始化形式:
格式1、动态初始化
数据类型 数组名 [ ][ ] = new 数据类型[m][n]
数据类型 [ ][ ] 数组名 = new 数据类型[m][n]
数据类型 [ ] 数组名 [ ] = new 数据类型[m][n]
举例:int [ ][ ] arr=new int [5][3]; 也可以理解为“5行3例”。
格式2、 静态初始化
数据类型 [ ][ ] 数组名 = {{元素1,元素2},{元素1,元素2},{元素1,元素2}};
举例:int [ ][ ] arr={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66},}。
二维数组的使用举例:
例1、定义一个二维数组 int[ ][ ] arr = {{5,7,9},{12,14,16,18},{23,25,36,47},{22,54,65,15},{22,34}};求数组元素的和。
输出结果:
例2、使用二维数组存储班上五个学生三门功课的考试成绩,要求输出每一个学生的总分、
平均分、最高分、最低分--------->使用就按盘录入的方式录入数据。
1物理一维结构,是一段地址连续的内存空间 不同的语言编译之后可能是行优先存储也可能是列优先存储2是,二维数组的内存分配方式也是一段连续的地址,这点跟一维的是相同的 3 a[ i ][ j ];(0<=i<4,0<=j<5) a表示首地址 a[0]……分别表示,第一二三四行(列)第一个元素的地址 (具体代表行还是列跟你所使用的编程语言有关)4 字符数组不一定是字符串,但是在C语言中,大多时候拿它等同于字符串5 特点是字符串最后一个一定是'\0'在数组不满的情况下6 不能举例来说。把一个数当作一个鸡蛋,那么一个int型的变量就是一个鸡蛋。现在建立一个一维数组int[5]:这个就相当于在你面前放了一排5个鸡蛋。
接下来到二维数组int[3][4]:首先,由二维数组的第二维[4]我们可以确定一排是4个鸡蛋,这个跟刚才的一维数组一样。
那么之前的[3]是什么呢?于是int[3][4]相当于在你面前放了3排的鸡蛋,一排4个。再到三维数组int[3][4][5]:
第三维的[5]就是之前一位数组里的一排5个鸡蛋,第二维的[4]就是一共有4排。那么这个[3]呢?那就是如果把这4排每排5个的鸡蛋看成一个小组,即45=20个鸡蛋是一个组,在你面前就放着3组的鸡蛋。
我也不是高手,也是初学。正巧碰到这个问题感觉我还是能解决的。就随手写了下,回答下。大家共同进步哈。有不对的地方还要请各位真正的高手指正。代码在下面,复制到你的编辑器里面看比较好,加了注解的。还有问题就再问哈。
---------------------------------------------------------------
public class d_array
{
public static void main(String[] args)
{
int[][] d_array = new int[8][8]; //定义一个8行8列的二维数组
int num = 1; //定义一个填充用的数备用
for (int i = 0 ; i < d_arraylength ; i++)
for (int j = 0 ; j < d_array[i]length ; j++)
d_array[i][j] = num++;
//让上面那个填充数自加并填充进数组
for (int p = 0 ; p < d_arraylength ; p++)
{
Systemoutprintln("数组第 "+(p+1)+" 行中的值为:"); //加一句说明是第几行的,不要也可以。
for (int q = 0 ; q < d_array[p]length ; q++)
Systemoutprint(d_array[p][q]+"\t"); //加这个\t可以有效的分离开两个数,排版好看
Systemoutprint("\n\n"); //换行,第一个用于一行之后换行,第二个用于一个空行,与下面那行隔开,排版好看的
}
//分行打印数组
int sum = 0; //一样,定义一个合备用
for (int m = 0 ; m < d_arraylength ; m++)
for (int n = 0 ; n < d_array[m]length ; n++)
sum = sum + d_array[m][n];
//分别将数组中的各个数加到这个合中去,最后得到的这个合就是数组中所有数的合了。
Systemoutprintln("数组中的所有值得合为:"+sum); //打印结果
}
}
---------------------------------------------------------------
其实二维数组的 *** 作秘诀就是两个for循环套起来用,这样就很简单了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)