int main()
{
int a[]={2,3,4,5,6};
int j;
for(j=0;j<5;j++)
{
printf("%d\n",*a);
a++;
}
return;
}
给出Lvalue所需的错误 但
int main()
{
int a[]={2,3,4,5,6};
int *p,j;
p=a;
for(j=0;j<5;j++)
{
printf("%d\n",*p);
p++;
}
return;
}
没有。 为什么???? 所以我不明白,即使在[]中,a被视为一个指针,所以为什么我们不能像指针那样递增它
答案 0 :(得分:2)
因为数组名称不是单独的内存单元格。它是一个命名的内存范围。因此,不清楚存储增量值的位置。
答案 1 :(得分:1)
指针和数组不完全可互换。
int main ()
{
int var[MAX] = {10, 100, 200};
for (int i = 0; i < MAX; i++)
{
*var = i; // This is a correct syntax
var++; // This is incorrect.
}
return 0;
}
将指针运算符*应用于var是完全可以接受的,但修改var值是非法的。原因是var是一个指向数组开头的常量,不能用作l值。
因为数组名称生成指针常量,所以它仍可用于指针式表达式,只要它不被修改