访问c中的数组元素

时间:2016-06-02 06:51:55

标签: c arrays increment

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

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;
}

5 个答案:

答案 0 :(得分:6)

  

arr ++没有用,但我想知道为什么?

arr存储&arr[0] 的基地址,因此,arr始终指向数组的起始位置,无法更改< / EM> 即可。这就是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]);
}

另一种方法是考虑一个指向&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

答案 1 :(得分:4)

虽然数组可以衰减到指向第一个元素的指针(这是使用例如*arr时发生的情况),但它本身不是指针。

您也无法更改数组,更改它的位置&#34;指向&#34;,这是arr++的错误,它与arr = arr + 1和{{{}}大致相同1}}允许分配回arr + 1不是,你不能改变数组的位置。

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

答案 2 :(得分:1)

CVS/{Entries,Repository,Root}

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

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

您不能将operator ++用于数组。 数组是指向数据的常量指针,无法修改。