【发布时间】:2015-10-27 02:33:37
【问题描述】:
为什么在修改二维数组左下角的这个简单部分的代码中要放入坐标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...
【问题讨论】:
-
但是如果我把 m[37][0] 像它应该是 'X' 不是在最左边,而是在后面一些空格
-
你确定不是你的终端在换行吗?尝试将其他(可见)字符放入空单元格中。
-
@Jashaszun 为什么它是未定义的行为?当然,使用指针算法,
m[37][-40]仍然在char m[MAX][MAX]之内。 -
@Jashaszun 不会说这很糟糕。经常使用负索引。是的,它们很容易被误用。 OP 只是在突破界限。
-
@OP 与
char m[40][40]; m[37][-40]='X';相同m[36][0]='X'
标签: c matrix multidimensional-array char coordinates