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

时间:2015-08-04 15:35:26

标签: c matrix multidimensional-array char coordinates

为什么在这个简单的代码部分中修改二维数组左下角的点,我有没有放入坐标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;
}

Souldn是m[37][0]?那行是37,列是0 ......

1 个答案:

答案 0 :(得分:1)

这可能是因为你的打印循环中没有换行符,这会因为大部分打印空间而加剧(当然,它们是不可见的)。如果您在内部打印循环后添加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");
}

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