#include <stdio.h>
#include <string.h>
main()
{
int x[100];
int i;
for(i=0;i<10;i++)
{
*(x++) = i;
}
}
main.c:在函数'main'中: main.c:10:12:错误:需要左值作为递增操作数 *(x ++)= i;
你能解释一下我收到这个错误的原因吗?
答案 0 :(得分:1)
可修改的l值不能具有数组类型。 l值是一个表达式,它可以出现在赋值的左侧。如果要声明大量相同类型的变量,可以使用数组,并且可以轻松地对其进行索引,因为它的布局在某种意义上是连续的。
当您想要不断更改变量所指向的地址的值时,可以使用指针。
你能做的是:
int x[100];
int *p_x = &x[0];
int i;
for(i=0;i<10;i++)
{
*(p_x++) = i;
}
由于x
是一个数组 - 它的值无法修改 - 当你执行x++
时,你试图增加它的值,从而得到错误。
答案 1 :(得分:0)
数组名称是不可修改的l值。你无法修改它。 *(++x) = i
错了。你可以试试这个
int *ptr = x;
for(i=0;i<10;i++)
{
*(ptr++) = i;
}
答案 2 :(得分:0)
该行:
*(x++) = i
尝试增加x
,这是数组的名称而不是左值(即不能出现在赋值的左侧,并且不可修改)。
答案 3 :(得分:0)
x
等数组类型的表达式不能是++
运算符的操作数。
除了数组元素本身(x
到x[0]
)之外,没有为变量x[99]
预留存储空间; IOW,我们可以应用自动增量运算符的内存中没有任何内容。 x
将会'衰变'#34;在大多数情况下,指针值,但指针值不存储在您可以修改它的任何地方。
正如其他人所示,您可以声明一个单独的指针变量并使用它而不是x
:
int *p = x;
for ( i = 0; i < 100; i++ )
*p++ = i;
Postfix ++
的优先级高于一元*
,因此*p++
将被解析为*(p++)
。
虽然坦率地说以下内容同样适用:
for ( i = 0; i < 100; i++ )
x[i] = i;