如何为 C 中的二维数组位置赋值?
How do I assign a value, to a 2D array location in C?
所以我是新手,所以请软着点。
我创建了一个 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");
}
但是,每当我尝试为二维数组中的某个位置赋值时,例如
FrameBuffer[0,1] = '.',
我遇到一个错误:
Expression must be a modifiable lvalue
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
,然后是[=40] =] j
。
意味着代码最终完全等同于 FrameBuffer[j] = '.'
。其中 FrameBuffer[j]
是整个数组,而不是 char
。您不能以这种方式为数组赋值,数组不是 "lvalue",它解释了编译器错误文本。
FrameBuffer[i,j] = '.';
printf("%c ", FrameBuffer[i,j]);
将这两条语句修改为
FrameBuffer[i][j] = '.';
printf("%c ", FrameBuffer[i][j]);
[i,j]
对编译器没有任何意义。这只不过是一个无效的语法。
也更正你的数组。
FrameBuffer[29][59]
是row=29
和col=59
的数组
改为FrameBuffer[60][30];
所以我是新手,所以请软着点。
我创建了一个 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");
}
但是,每当我尝试为二维数组中的某个位置赋值时,例如
FrameBuffer[0,1] = '.',
我遇到一个错误:
Expression must be a modifiable lvalue
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
,然后是[=40] =] j
。
意味着代码最终完全等同于 FrameBuffer[j] = '.'
。其中 FrameBuffer[j]
是整个数组,而不是 char
。您不能以这种方式为数组赋值,数组不是 "lvalue",它解释了编译器错误文本。
FrameBuffer[i,j] = '.';
printf("%c ", FrameBuffer[i,j]);
将这两条语句修改为
FrameBuffer[i][j] = '.';
printf("%c ", FrameBuffer[i][j]);
[i,j]
对编译器没有任何意义。这只不过是一个无效的语法。
也更正你的数组。
FrameBuffer[29][59]
是row=29
和col=59
改为FrameBuffer[60][30];