#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语句中不会改变?
答案 0 :(得分:1)
a[i] = a[i]++;
和
a[i] = ++a[i];
都有未定义的行为,不应该使用。
如果要增加,则应始终执行以下操作之一:
a[i] = a[i] + 1;
a[i] += 1;
a[i]++;