为什么在这个简单的代码中修改二维数组左下角的点我必须输入坐标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");
}
我还用句点 ('.'
) 替换了空格以使其更加明显。
关于c - 为什么矩阵列的第一个索引是负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813492/