2015-04-12 52 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]++;