#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 Statement get array Change Из-за предварительного приращения. Но мой вопрос: почему комментарий Комментарий 1 не может изменить элементы массива, , так как изменения, сделанные в другой функции (здесь fun()), могут производить одинаковые изменения в том же массиве.
Итак, почему элементы массива не изменяются в комментарии 1?
Оба из них являются неопределенное поведение. Если вы хотите увеличивать элементы массива, просто напишите 'a [i] ++;'. Конец истории. – user3386109
post increment -> say a = 5; b = a ++; то значение b равно 5, после чего значение увеличится до 6. pre increment -> b = ++ a; первое значение a увеличится до 6, а затем оно будет присвоено b. –