访问c中的数组元素

mor*_*tar 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Che*_*bim 6

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

arr&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))
}
Run Code Online (Sandbox Code Playgroud)

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


或者,为了打印数据而不是这样使用索引i:

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

另一种方法是考虑一个新的指针&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
}
Run Code Online (Sandbox Code Playgroud)

有关指针算术的进一步阅读:此处