Language agnostic “a”的定义是什么;“真的”;多维数组以及哪些语言支持它们?

Language agnostic “a”的定义是什么;“真的”;多维数组以及哪些语言支持它们?,language-agnostic,multidimensional-array,jagged-arrays,language-theory,Language Agnostic,Multidimensional Array,Jagged Arrays,Language Theory,我读过的大多数编程书籍都有以下内容: X语言不支持真正的多维数组,但您可以用数组数组模拟(近似)它们 因为我的大部分经验都是基于C语言的,例如C++、java、javascript、PHP等等,我不知道什么是“真”多维数组。 真正的多维数组的定义是什么?哪些语言支持它? 另外,如果可能,请在代码中显示一个真正的多维数组示例。Java也使用它们 int[][] a2 = new int[10][5]; 我发现它有一个有趣的用途 String[][] Data; //Assign the va

我读过的大多数编程书籍都有以下内容:

X语言不支持真正的多维数组,但您可以用数组数组模拟(近似)它们

<>因为我的大部分经验都是基于C语言的,例如C++、java、javascript、PHP等等,我不知道什么是“真”多维数组。 真正的多维数组的定义是什么?哪些语言支持它? 另外,如果可能,请在代码中显示一个真正的多维数组示例。

Java也使用它们

int[][] a2 = new int[10][5];
我发现它有一个有趣的用途

String[][] Data;

 //Assign the values, do it either dynamically or statically
 //For first fow
 Data[0][0] = "S"; //lastname
 Data[0][1] = "Pradeep"; //firstname
 Data[0][2] = "Kolkata"; //location

 //Second row
 Data[1][0] = "Bhimani"; //lastname
  Data[1][1] = "Shabbir"; //firstname
  Data[1][2] = "Kolkata"; //location

 //Add as many rows you want

 //printing
 System.out.print("Lastname\tFirstname\tLocation\n");
 for(i=0;i<2;i++)
 {
   for(j=0;j<3;j++)
   {
     System.out.print(Data[i][j]+"\t");
   }
   //move to new line
   System.out.print("\n");
 }
String[][]数据;
//分配值,动态或静态执行
//首先
数据[0][0]=“S”//姓氏
数据[0][1]=“Pradeep”//名字
数据[0][2]=“加尔各答”//位置
//第二排
数据[1][0]=“Bhimani”//姓氏
数据[1][1]=“Shabbir”//名字
数据[1][2]=“加尔各答”//位置
//添加所需的行数
//印刷品
System.out.print(“Lastname\t firstname\t位置\n”);
for(i=0;iC#既支持真正的多维数组,也支持可以替代的“锯齿”数组(数组数组数组)

// jagged array
string[][] jagged = new string[12][7];

// multidimensional array
string[,] multi = new string[12,7];

锯齿状数组通常被认为更好,因为它们可以做多维数组所能做的一切,甚至更多。在锯齿状数组中,可以让每个子数组具有不同的大小,而在多维数组中则不能这样做。甚至有一个代码分析规则可以做到这一点()

不必浏览Sun和Microsoft网站上的大量文献,这就是我在C时代的记忆。希望这对我有所帮助

简单地说,如果我们只考虑二维,数组可以表示为二维数组和指针数组 int x[15][20]; int*y[15]

在本例中,x[5][6]和b[5][6]在语法上都是有效的,并且最终都指向一个int

这就是说,x是一个真正的二维数组:一旦创建它,将有300个位置(可以包含int)被放在一边,您可以使用众所周知的下标约定访问这个矩形(15行20列)数组,通过计算(20*row)+col得到x[row,col]

但是,对于y,在定义结构时,只分配了15个指针,但没有初始化。(需要显式地完成初始化)

这种方法有优点和缺点(指针数组或“数组数组数组”或所谓的锯齿数组):

优点: 此数组的行可以具有不同的长度,即y的每个元素不需要指向20个元素的行;一个元素可以指向2个元素,第二个元素可以指向3个元素,第三个元素可以指向零个元素,依此类推

缺点: 然而,在一个最佳情况下,如果y的每个元素都指向一个20元素的数组,那么将留出300个整数位置,加上10个单元格作为指针,这是额外的


从当前示例的角度来看,上面给出的C sharp示例(在前面的一篇文章中)应该足够了。

Common Lisp支持这两种类型的数组


多维数组称为数组,而“一维”数组称为向量。

据我所知,Fortran-90过去有it@Shekhar_Pro:我使用过的每个FORTRAN版本(back-thru 66)最多有7维。在您的示例中,x[0]将只指向第一个数组。此外,由于数组在C中衰减为指针,因此x不是真正的多维数组,即使它在内存中是连续的,您可以使用指针算法访问数组。这就是为什么C使用x[][]语法,而不是x[,]@ JeSeGoo:<代码> x/COD>是一个真正的多维数组,C虽然有数组衰变。谢谢答案。我现在明白了一个真正的多维数组。但是,记住C和C++子数组即使使用数组数组也不能有不同的大小。C语言也是唯一支持它们的语言吗?“C++子数组即使使用数组数组也不能有不同的大小。”不,它们不使用数组数组。@ DOM0“C++子数组即使使用数组数组也不能有不同的大小。”为什么这不是真的?C++中的多维数组是数组数组。“数组的数组”“表示第一个数组包含一组其他数组(即不同的对象),这在C/C++中并非如此。int[5][2]是单个对象。类似int*[5]的内容可以视为数组数组。