2015-04-12 54 views
0
#include<conio.h> 
#include<stdio.h> 

void fun(int []); 

int main(){ 

int arr[10] = {1,1,1,1,1}; 
int i=0; 
printf("Before Change : "); 
for(i=0;i<5;i++){ 
    printf("%d, ",arr[i]); 
} 

fun(arr); 

printf("\nAfter Change : "); 
for(i=0;i<5;i++){ 
    printf("%d, ",arr[i]); 
} 
getch(); 
} 

void fun(int a[]) 
{ 
int i; 
for(i=0;i<5;i++){ 

     //a[i] = a[i]++; // Comment 1 
     //a[i] = ++a[i]; // Comment 2 
} 
} 

當我使用註釋1個報表然後我得到這樣的輸出:沒有在數組元素的變化

變更前:1,1,1,1,1,

變化後:1,1 ,1,1,1,

當我使用註釋2語句然後我得到這樣的輸出:

變更前:1,1,1,1,1,

變更後:2,2,2,2,2,

在這裏,我知道爲什麼註釋2聲明得到陣列的變化,由於前期增量。 但我的問題是,爲什麼評論1個語句無法更改數組元素, 因爲在其他功能所做的更改(這裏是有趣的())能夠以實現同一陣列相同的變化。

那麼,爲什麼數組元素不評論1個語句改變?

+2

。這都是不確定的行爲。如果你想增加數組的元素,那就寫'a [i] ++;'。故事結局。 – user3386109

+0

後增 - >說a = 5; b = a ++;那麼b的值爲5,之後一個值將增加到6. pre increment - > b = ++ a; a的第一個值將增加到6,然後分配給b。 –

回答

1
a[i] = a[i]++; 

a[i] = ++a[i]; 

都有不確定的行爲,並且不應該使用。

如果你想增加,你應該總是做下列之一:

a[i] = a[i] + 1; 
a[i] += 1; 
a[i]++;