代码之家  ›  专栏  ›  技术社区  ›  Val

如何为C中的2D数组位置赋值?

  •  2
  • Val  · 技术社区  · 7 年前

    所以我是个新手,所以请温柔一点。

    我已经创建了一个2D数组,60x30,并希望通过双for循环将其显示在屏幕上作为网格。我使用的是一个简单的字符''对于网格的每个插槽,仅用于测试。

    char FrameBuffer[29][59];
    for (int i = 0; i <= 29; i++) 
    {
        for (int j = 0; j <= 59; j++)
        {
            FrameBuffer[i, j] = '.';
            printf("%c ", FrameBuffer[i,j]);
        }
        printf("\n");
    }
    

    然而,每当我尝试为2D数组中的某个位置赋值时,例如。

    FrameBuffer[0,1] = '.',
    

    我遇到了一个错误:

    Expression must be a modifiable lvalue
    
    2 回复  |  直到 7 年前
        1
  •  5
  •   Lundin    7 年前

    FrameBuffer[29][59] 这是一个29x59阵列,您需要一个30x60。

    请不要混淆 数组声明 具有 数组索引 . 数组声明完全正常;如果需要30x60,请键入 FrameBuffer[30][60] . 然而,当访问数组时,从索引0开始。

    只需将代码更改为:

    char FrameBuffer[30][60];
    for (int i = 0; i < 30; i++)
    {
      for (int j = 0; j < 60; j++)
      {
        FrameBuffer[i][j] = '.'; // note the correct syntax here
    

    编辑

    作为一种奇怪的副作用, FrameBuffer[i, j] 被解释为与预期完全不同的东西。此处的逗号被视为 逗号运算符 ,一种特殊的运算符,用于计算左表达式 i ,然后是正确的表达式 j ,然后返回 j .

    FrameBuffer[j] = '.' . 哪里 FrameBuffer[j] 是一个完整的数组,而不是 char . 不能这样给数组赋值,数组不是“左值”,这解释了编译器错误文本。

        2
  •  1
  •   Community CDub    5 年前

    帧缓冲区[i,j]=';

    printf(“%c”,帧缓冲区[i,j]);

    将这两个语句修改为

    FrameBuffer[i][j] = '.';
    
    printf("%c ", FrameBuffer[i][j]);
    

    [i,j] 对编译器来说没有任何意义。这只是一个无效的语法。

    同时更正数组。

    FrameBuffer[29][59] 它是一个数组 row=29 col=59

    将其更改为 FrameBuffer[60][30];