2017-06-08 19 views
-2

该代码当b递增,被在增量这个C代码如何工作,但另一个说L值需要?

#include<stdio.h> 

int main() 
{ 
int a[] = {10,20,30,40,50}, *p, j; 
int *b = a; 
for(j=0;j<5;j++) 
{ 
printf("%d\n",*b); 
b++; 
} 
return 0; 
} 

这里会发生什么印刷工作正常? ++有什么影响建议lvalue是必需的。 a ++是否在数组a的所有元素之后移动到一个点?

#include<stdio.h> 

int main() 
{ 
int a[] = {10,20,30,40,50}, *p, j; 
for(j=0;j<5;j++) 
{ 
printf("%d\n",*a); 
a++; 
} 
return 0; 
} 
+6

数组衰减为指针并不意味着它们的行为如同指针...... – LPs

+1

请阅读C中指针和数组之间的区别http://eli.thegreenplace.net/2009/10/21/is-pointers-and-arrays-equivalent-in-c – Fredrik

+2

@LPs *数组衰减为指针的事实... *我更喜欢将衰减看作“衰减到数组地址* “而不是指针。 “阵列的地址”不能改变,也不能改变。 –

回答

2

a是衰变成(不可修改的)指针指向数组(并且仅始终以阵列)的指针上下文中使用时的阵列。所以它不能被修改,所以a++不起作用。

b是一个指针,可以随处指向,因此也可以修改,所以b++的作品。

+0

说“a”是一个“最终”指针是不是一个延伸,是吗? –

+1

@Shiva这将是一个延伸。 'a'是一个数组,数组不能增加。 –

+1

我想知道如果在100年的时间里仍然会有人认为数组是指针 –