为什么矩阵列的第一个索引是负数?

why the first index of the column of a matrix is negative?

为什么在这个简单的代码中修改二维数组左下角的点必须输入坐标m[37][-40]

#include <stdio.h>
#include <stdlib.h>
#define MAX 40

int main()
{
    int i, j;
    char m[MAX][MAX];

    for(i=0; i<MAX; i++){
        for(j=0; j<MAX; j++)
            m[i][j]=' ';
    }

    m[37][-40]='X';

    for(i=0; i<MAX; i++){
        for(j=0; j<MAX; j++)
            printf("%c", m[i][j]);
    }
    return 0;
}

不应该是m[37][0]吗?因为行是37列是0...

这可能是因为您在打印循环中没有换行符,并且由于您打印了大部分空格(当然,这些空格是不可见的),所以这种情况更加严重。如果你在你的内部打印循环之后添加一个 printf("\n");(所以下面的代码),并将 m[37][-40]='X'; 替换为 m[37][0]='X';,那么它应该可以工作(当我 运行 它):

for(i=0; i<MAX; i++){
    for(j=0; j<MAX; j++)
        printf("%c", m[i][j]);
    printf("\n");
}

我还用句点 ('.') 替换了空格以使其更明显。