以下是在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;
}
答案 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 ++用于数组。 数组是指向数据的常量指针,无法修改。