首先,纠正题目中的一个错误: m行n列的二维数组,arr[0,0]意味着行、列下标的开始均为0,那么行值应该是0..m-1,列值应该是0..n-1。故arr[i,j]后的(i<=m&&j<=n)是错误的,只能是(i a[i,j]表示i行j列的元素。按行优先存储的话,a[i,j]之前的i (0..i-1)行全满,故有i*n个元素。在i行里,排在a[i,j]之前有j (0..j-1)个元素。两者相加,a[i,j]是在a[0,0]之后的(i*n+j)个元素。
C语言本质上只是支持一维数组,对多维数组,实现的时候也是一维数组的组织方式排列上去。对二维数组来说,在内存中就是按照先行后列的方式,一行一行的依次排列存储,所以可以用i*n+j的方式访问二维数组的每一个元素。楼主参考。祝你好运。