C语言 二维数组问题,

返回值return a[i][j];
这里接上一个for循环语句i,j不是都为2吗,应该输出a[2][2]的值啊,为什么我测试出来输出的是a[3][3]的值12啊??
求指点

img

你可能要好好理解一下循环流程,,你i== 2, j == 0 时循环通过,然后j++3次后, j == 3 (j循环停止), 然后到i循环,i++,i==3,i循环停止,不就是输出a[3][3]

因为经过for循环后面的i++,j++,i从最后一个值2变为了3,j从最后一个值2也变为了3,是这样来的,测试代码如下:

#include <stdio.h>

int fun(int a[4][4]){
    
    int i,j;
    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            a[i][j]=i+j;
        }
    }
    
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            a[i+1][j+1]+=a[i][j];
        }
    }
    printf("i=%d,j=%d,a[%d][%d]=%d\n",i,j,i,j,a[i][j]);
    
    
    return a[i][j];
} 


int main(void){
    
    int a[4][4];
    printf("%d",fun(a));
    
    return 0;
}

img