楼主问的问题假设数组时a[100][5000],即方法(1)是先循环行号,再循环列号
现在在计算机上存储数组大部分是按行优先存储的,也就是说在计算机上是先存完一行在存第二行的,如下:
a[0][0],a[0][1]...a[0][n],a[1][0],a[1][1],...a[1][n],a[2][0],a[2][1]...
这样一来在第(1)种方法中定位更快点,可能是这样定位的:先取第一行的第一个元素a[0][0],接着取第一行的第二个元素a[0][1],直到取完第一行的最后一个元素a[0][n],接着行号加1直接取a[1][0]。因为数组在内存中是连续的空间,所以指针只需要做一个加1运算既可以直接定位,速度快了很多。
而如果按照第(2)种方法先对列号进行循环这样的话第一次访问a[0][0],第二次访问a[1][0]...可以看到,每次指针不仅要做加1操作,而且还要定位指针,这样的话每次都多了寻址时间,所以当数量大时效果肯定远远不如方法(1)。
个人的见解,有错误希望指正。