如何为C中的2D阵列位置分配值?

时间:2017-12-04 10:11:13

标签: c arrays 2d

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

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

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

3 个答案:

答案 0 :(得分:5)

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。您不能以这种方式为数组赋值,数组不是&#34;左值&#34;,它解释了编译器错误文本。

答案 1 :(得分:1)

  

FrameBuffer [i,j] =&#39;。&#39;;

     

printf(&#34;%c&#34;,FrameBuffer [i,j]);

将这两个语句修改为

FrameBuffer[i][j] = '.';

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

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

也纠正你的数组。

FrameBuffer[29][59]这是一个row=29col=59

的数组

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

答案 2 :(得分:-1)

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

在这里你分配30 * 60个字符,所以你需要在每个字符上分配30 * 60 + 1来添加一个字符来表示结束(&#39; \ 0&#39;)。 (很容易解析它,因为你不需要你可以做一段时间的大小(Framebuffer [i] [j])它将是&#39; \ 0&#39;)的值0。 / p>