【问题标题】:why the first index of the column of a matrix is negative?为什么矩阵列的第一个索引是负数?
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 这绝对是 Jashaszum 的原因。 Lu Tub 的控制台或屏幕无疑有 80 个字符宽。
猜你喜欢
  • 2017-03-19
  • 2021-09-16
  • 2011-05-09
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多