Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 大多数语言的行和列索引约定 问题之后,对于一个2维数组“ x(i,j)< /强>”,它是否是一个一般规则(对于大多数语言来说),对于索引的列,索引的第一个索引 i < /强>?_C_Arrays_Matlab_Fortran - Fatal编程技术网

C 大多数语言的行和列索引约定 问题之后,对于一个2维数组“ x(i,j)< /强>”,它是否是一个一般规则(对于大多数语言来说),对于索引的列,索引的第一个索引 i < /强>?

C 大多数语言的行和列索引约定 问题之后,对于一个2维数组“ x(i,j)< /强>”,它是否是一个一般规则(对于大多数语言来说),对于索引的列,索引的第一个索引 i < /强>?,c,arrays,matlab,fortran,C,Arrays,Matlab,Fortran,我知道Fortran是以列为主的,C语言是以行为主的,对于这两种语言,经典的约定似乎是I=rows和j=columns,不是吗 此外,有人能告诉我Matlab是行专业还是列专业吗 这是一种误解。在内存中如何分配原始数据与原始数据应该建模的更高级别表示之间没有关系 C对[i][j]中的索引没有任何意义,它只是指定如何在内存中分配数据,而不是如何将数据呈现给用户i可以是行,也可以是列,这由程序员在应用程序中指定 但是,C会在内存中一起分配最右边的维度,例如: int arr[2][3] = { {1

我知道Fortran是以列为主的,C语言是以行为主的,对于这两种语言,经典的约定似乎是I=rows和j=columns,不是吗


此外,有人能告诉我Matlab是行专业还是列专业吗

这是一种误解。在内存中如何分配原始数据与原始数据应该建模的更高级别表示之间没有关系

C对
[i][j]
中的索引没有任何意义,它只是指定如何在内存中分配数据,而不是如何将数据呈现给用户
i
可以是行,也可以是列,这由程序员在应用程序中指定

但是,C会在内存中一起分配最右边的维度,例如:

int arr[2][3] = { {1,2,3}, {1,2,3} };

+-------+-------+-------+-------+-------+-------+
|       |       |       |       |       |       |
|   1   |   2   |   3   |   1   |   2   |   3   |
|       |       |       |       |       |       |
+-------+-------+-------+-------+-------+-------+
这意味着在该矩阵上迭代的首选方式是:

for(size_t i=0; i<2; i++)
  for(size_t j=0; j<3; j++)
    arr[i][j] = x;

for(size_t i=0;i这是一个误解。在内存中如何分配原始数据与原始数据应该建模的更高级别表示之间没有关系

C对
[i][j]
中的索引没有任何意义,它只是指定如何在内存中分配数据,而不是如何将数据呈现给用户。
i
可以是行,也可以是列,这由程序员在其应用程序中指定

但是,C会在内存中一起分配最右边的维度,例如:

int arr[2][3] = { {1,2,3}, {1,2,3} };

+-------+-------+-------+-------+-------+-------+
|       |       |       |       |       |       |
|   1   |   2   |   3   |   1   |   2   |   3   |
|       |       |       |       |       |       |
+-------+-------+-------+-------+-------+-------+
这意味着在该矩阵上迭代的首选方式是:

for(size_t i=0; i<2; i++)
  for(size_t j=0; j<3; j++)
    arr[i][j] = x;
for(size\t i=0;i您的问题已得到回答

引述:

总之:

在C和Fortran中,内存的“形状”是完全相同的,尽管由于反向数组索引,语言的差异使它看起来不同

如果您不按k,j,i顺序迭代Fortran数组,您将无序访问内存,并对缓存性能产生负面影响

你的问题已经回答了

引述:

总之:

在C和Fortran中,内存的“形状”是完全相同的,尽管由于反向数组索引,语言的差异使它看起来不同

如果您不按k,j,i顺序迭代Fortran数组,您将无序访问内存,并对缓存性能产生负面影响


对于MATLAB,第一个索引是行,第二个索引是列。但是数组在内部是按列的主要顺序存储的(MATLAB的早期版本是用FORTRAN实现的;最初商业化时,它主要转换为C,但保持了这种惯例).

对于MATLAB,第一个索引是行,第二个索引是列。但是数组在内部是按列的主要顺序存储的(很早的MATLAB版本是用FORTRAN实现的;最初商业化时,它主要转换为C,但保留了这一惯例).

在Matlab中,第一个索引是行,第二个索引是列。否:Fortran以一种方式查看它,而C以另一种方式查看它。这两个视图是相反的。Matlab是因为它的Fortran根。C没有二维数组。如果你想到数组数组,那就不完全一样了。在Matlab中,第一个索引是行,而不是第二个索引是列。不:Fortran以一种方式查看它,而C以另一种方式查看它。这两个视图是相反的。MATLAB是因为它的Fortran根。C没有二维数组这样的东西。如果你想的是数组数组,那就不完全一样了。“形状”是什么记忆的“形状”到底意味着什么?数据最终被有效地存储在“平面”中,而与此相关的是索引方案,因此不清楚它们的观点。记忆的“形状”到底意味着什么?数据最终被有效地存储在“平面”中与此相关的是索引方案,因此不清楚他们的观点。你是说如果我这样做:`A=[12;34;56]`实际上在内部存储为
1,3,5,2,4,6
?回答我自己,这似乎确实是这样的,因为matlab允许在多维数组上使用单个(平面)索引,例如
A(3)->5
正确-这在MATLAB中被称为线性索引。你是说如果我这样做:`A=[12;34;56]`实际上在内部存储为
1,3,5,2,4,6
?回答我自己,事实上似乎是这样的,因为MATLAB允许多维数组上的单个(平面)索引,例如
A(3)->5
正确-这在MATLAB中称为线性索引。