关于二维数组arr[m个行,n个列],中arr[i,j]的地址问题

2025-05-20 11:02:29
推荐回答(2个)
回答1:

首先,纠正题目中的一个错误:
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)个元素。

回答2:

C语言本质上只是支持一维数组,对多维数组,实现的时候也是一维数组的组织方式排列上去。

对二维数组来说,在内存中就是按照先行后列的方式,一行一行的依次排列存储,所以可以用i*n+j的方式访问二维数组的每一个元素。

楼主参考。
祝你好运。