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

why array name ca'nt be incremented like a ponter

本文关键字:一样 ponter 数组 不能 为什么      更新时间:2023-10-16
          int main()
           {
             int a[]={2,3,4,5,6};
             int j;
             for(j=0;j<5;j++)
               {
                    printf("%dn",*a);
                      a++; 
               }
            return;
         }

给出左值所需的错误但

        int main()
        {
           int a[]={2,3,4,5,6};
           int *p,j;
            p=a;
          for(j=0;j<5;j++)
            {
              printf("%dn",*p);
               p++; 
            }
          return;
        }

不。为什么????所以我不明白,即使在 a[] 中,a 被视为指针,那么为什么我们不能像指针一样递增它

因为数组名称不是一个单独的存储单元。它是一个命名的内存扩展数据块。因此,不清楚在哪里存储增量值。

指针和数组不能完全互换。

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

由于数组名生成指针常量,因此只要不对其进行修改,它仍然可以在指针样式表达式中使用