C 作为增量运算符所需的左值
我在代码中遇到一个与左值相关的错误:C 作为增量运算符所需的左值,c,compiler-errors,lvalue,C,Compiler Errors,Lvalue,我在代码中遇到一个与左值相关的错误: #include <stdio.h> #include<string.h> main() { int a[]={10,20,30,40,50}; int j; for(j=0;j<5;j++) { printf("%d\n",a); a++; } return 0; } 为什么会出现这个问题? 任何帮助都将不胜感激。您正在尝试递增int[]变量,但该类变量不支持递增运算符 如果您试
#include <stdio.h>
#include<string.h>
main()
{
int a[]={10,20,30,40,50};
int j;
for(j=0;j<5;j++)
{
printf("%d\n",a);
a++;
}
return 0;
}
为什么会出现这个问题?
任何帮助都将不胜感激。您正在尝试递增
int[]
变量,但该类变量不支持递增运算符
如果您试图迭代数组,只需使用下标运算符作为循环条件使用的变量:
for (int j = 0; j < 5; ++j)
printf("%d\n",a[j]);
for(int j=0;j<5;++j)
printf(“%d\n”,a[j]);
主要问题是
++x
运算符在语义上等价于x=x+1,x
。这要求x
是可赋值的()(因为您为其赋值),但数组是不可赋值的。您试图递增int[]
变量,但该类变量不支持递增运算符
如果您试图迭代数组,只需使用下标运算符作为循环条件使用的变量:
for (int j = 0; j < 5; ++j)
printf("%d\n",a[j]);
for(int j=0;j<5;++j)
printf(“%d\n”,a[j]);
主要问题是
++x
运算符在语义上等价于x=x+1,x
。这要求x
是可分配的()(因为您给它分配了一个新值),但数组是不可分配的。虽然数组确实会衰减为指针,但数组不是指针,例如,不能增加它
相反,您可以通过执行以下操作将其衰减为指针:
printf("%d\n", *(a + j));
虽然数组确实会衰减为指针,但数组不是指针,例如,不能增加它 相反,您可以通过执行以下操作将其衰减为指针:
printf("%d\n", *(a + j));
在这个表达式中
a++;
将创建一个类型为int*
的临时对象,该对象指向数组a的第一个元素。不能增加临时对象。如果你写一个例子也是一样的
int x = 10;
( x + 0 )++;
您可以用以下方法编写程序
#include <stdio.h>
int main()
{
int a[] = { 10, 20, 30, 40, 50 };
int *p;
for ( p = a; p != a + sizeof( a ) / sizeof( *a ); ++p )
{
printf( "%d\n", *p );
// or printf( "%p\n", p ); depending on what you want to output
}
return 0;
}
#包括
int main()
{
INTA[]={10,20,30,40,50};
int*p;
对于(p=a;p!=a+sizeof(a)/sizeof(*a);+p)
{
printf(“%d\n”,*p);
//或printf(“%p\n”,p);具体取决于要输出的内容
}
返回0;
}
在此表达式中
a++;
将创建一个类型为int*
的临时对象,该对象指向数组a的第一个元素。不能增加临时对象。如果你写一个例子也是一样的
int x = 10;
( x + 0 )++;
您可以用以下方法编写程序
#include <stdio.h>
int main()
{
int a[] = { 10, 20, 30, 40, 50 };
int *p;
for ( p = a; p != a + sizeof( a ) / sizeof( *a ); ++p )
{
printf( "%d\n", *p );
// or printf( "%p\n", p ); depending on what you want to output
}
return 0;
}
#包括
int main()
{
INTA[]={10,20,30,40,50};
int*p;
对于(p=a;p!=a+sizeof(a)/sizeof(*a);+p)
{
printf(“%d\n”,*p);
//或printf(“%p\n”,p);具体取决于要输出的内容
}
返回0;
}
你不想printf(“%d\n”,a[j])
?你误解了数组“a[j]”的索引,数组名是常量。相关:你不想printf(“%d\n,a[j])
?你误解了数组“a[j]”的索引,数组名是常量。相关:你为什么写*(a+j)
而不是a[j]
?它们完全相等;在这两种情况下,a
都会衰减。你为什么要写*(a+j)
而不是a[j]
?它们完全相等;在这两种情况下,a
都会衰减。