没有在数组元素的变化
问题描述:
#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个语句改变?
答
a[i] = a[i]++;
和
a[i] = ++a[i];
都有不确定的行为,并且不应该使用。
如果你想增加,你应该总是做下列之一:
a[i] = a[i] + 1;
a[i] += 1;
a[i]++;
。这都是不确定的行为。如果你想增加数组的元素,那就写'a [i] ++;'。故事结局。 – user3386109
后增 - >说a = 5; b = a ++;那么b的值为5,之后一个值将增加到6. pre increment - > b = ++ a; a的第一个值将增加到6,然后分配给b。 –