【问题标题】:Accessing array elements in c在 c 中访问数组元素
【发布时间】:2016-10-01 18:21:53
【问题描述】:

以下是在代码块中编译此代码的代码我收到以下错误消息:

1 value required as increment operator.

现在我知道arr++ 不起作用,但我想知道原因。

#include<stdio.h>
int main()
{
  int arr[5]={1,2,3,4,5},i;

  for(i=0;i<5;i++)
  {
    printf("%d\n",*arr);
    arr++;
  }
  return 0;
}

【问题讨论】:

    标签: c arrays increment


    【解决方案1】:

    虽然数组可以衰减为指向其第一个元素的指针(当您使用 *arr 时会发生这种情况),但它本身并不是一个指针。

    你也不能改变一个数组,改变它“指向”的位置,这是arr++的问题,它与arr = arr + 1大致相同,而arr + 1允许分配回@987654325 @ 不是,你不能改变数组的位置。

    如果你想像你一样做,那么你需要一个实际的指针,将它初始化为指向arr的第一个元素的位置,并在循环中使用指针。

    【讨论】:

      【解决方案2】:

      您不能对数组使用运算符 ++。 数组是指向数据的常量指针,不能修改。

      【讨论】:

      • 作为替代方案,您可以通过 index 访问 tyo 数组:arr[i] 或声明额外的指针 int *ptr=arr 并增加/减少它。
      【解决方案3】:

      arr++ 不工作,但我想知道为什么?

      arr 存储基地址为&amp;arr[0] 因此,arr 始终指向数组的起始位置,不能更改。这就是arr++ 无效且不起作用的原因。


      解决方案:

      您可以在*引用运算符)运算符的帮助下使用arr 来打印数组元素

      for(i=0;i<5;i++)
      {
          printf("%d\n",*(arr+i)); 
          //pointer arithmetic *(arr+i)=*(&arr[0]+i*sizeof(data_type_of_arr))
      }
      

      这里,指针算术有助于理解


      否则,为了打印数据,请改用索引i

      for(i=0;i<5;i++)
      {
          printf("%d\n",arr[i]);
      }
      

      另一种方法是考虑一个指向&amp;arr[0] 的新指针并递增

      int *p=&arr[0];
      for(i=0;i<5;i++)
      {
          printf("%d\n",*p);
          p++;
          //pointer arithmetic *(p)=*((&p)+1*sizeof(data_type_of_arr))
          //NOTE: address of p updates for every iteration
      }
      

      进一步阅读指针算法here

      【讨论】:

        【解决方案4】:

        增量运算符应用于变量的。数组的值就是它的元素,那么你希望增量运算符做什么呢?增加数组中的每个元素?另一方面,指针变量的值是地址,因此此处适用自增运算符。

        【讨论】:

          【解决方案5】:
          #include<stdio.h>
          int main()
          {
             int arr[5]={1,2,3,4,5},i;
          
             for(i=0;i<5;i++)
             {
                printf("%d\n",*(arr+i));
             }
             return 0;
          }
          

          arr++ 不工作。因为数组是常量指针,你不能增加地址。所以永远记住数组名称表示为基地址,然后如果你想增加,那就给那个额外的争论。参见上面的例子。

          【讨论】:

            猜你喜欢
            • 2015-01-09
            • 1970-01-01
            • 2012-11-26
            • 2014-10-13
            • 1970-01-01
            • 2021-05-20
            • 2022-01-14
            • 1970-01-01
            相关资源
            最近更新 更多