为什么数组名称不能像指针一样递增

时间:2013-11-23 10:55:35

标签: c++ c

          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被视为一个指针,所以为什么我们不能像指针那样递增它

2 个答案:

答案 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值。

因为数组名称生成指针常量,所以它仍可用于指针式表达式,只要它不被修改