数组元素没有变化

时间:2015-04-12 05:55:58

标签: c

#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
 }
 }

当我使用Comment 1 Statement时,我得到这个输出:

变更前:1,1,1,1,1,

变更后:1,1,1,1,1,

当我使用Comment 2 Statement时,我得到这个输出:

变更前:1,1,1,1,1,

变更后:2,2,2,2,2,

在这里我知道为什么评论2声明得到数组更改由于预增量。 但我的问题是为什么评论1声明无法更改数组元素, 因为在其他函数中进行的更改(这里是fun())能够在同一个数组中进行相同的更改。

那么为什么数组元素在注释1语句中不会改变?

1 个答案:

答案 0 :(得分:1)

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

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

都有未定义的行为,不应该使用。

如果要增加,则应始终执行以下操作之一:

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