就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、参考资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,访问帮助中心 /help/reopen-questions 以获得指导。
这只是一个随机的设计选择还是有任何特定原因 C 支持行优先而不是列优先?我知道 Fortran 使用列专业。那么这些设计选择背后的原因(如果有的话)是什么?
根据我对问题的一些评论以及其他一些答案的回答(以及我自己的一些反思 - 但值得注意的是对 C 语言设计过程没有任何了解......),我相信这是一个仅仅基于的选择做出这个决定的人(里奇?)自己需要什么。
如果将多维数组的索引解释为矩阵索引,则将第一个索引作为行索引,将第二个索引作为列索引(即列优先结构)是有意义的。如果您的应用程序需要大量线性代数或其他矩阵密集型计算,那么以一种能够有效地一次遍历一列的方式存储这些结构也是有意义的,因为许多算法都这样做。因此,Matlab 和 Fortran 等编程语言受益于列优先——它使得编写考虑矩阵和矩阵算法的高效代码变得更加容易。
另一方面,C 比例如 C 更通用。 Matlab 或 Fortran。如果你不打算使用int**
专门针对matrices ,哪个索引是哪个并不重要。看起来很自然,如果a
is an int**
, then a[2]
返回一个int*
and a[2][1]
返回一个int
- 您“深入挖掘”多维数组。为了效率,我们现在只关心是否选择a[2]
并且想要迭代它,它应该被有效地缓存。作为程序员,你是否关联并不重要a[2]
使用矩阵行或矩阵列 - 我们不使用矩阵!
因此,没有强有力的理由(我可以从我的头脑中看出)C 是列主的。在实施第一个版本时,它可能只是easier 使其成为行优先 - 也许是因为底层低级语言(汇编程序?)已经是行优先 - 就是这样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)