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
都会衰减。