2017-06-08 9 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年的時間裏仍然會有人認爲數組是指針 –