2015-04-12 4 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 Statement get array Change Из-за предварительного приращения. Но мой вопрос: почему комментарий Комментарий 1 не может изменить элементы массива, , так как изменения, сделанные в другой функции (здесь fun()), могут производить одинаковые изменения в том же массиве.

Итак, почему элементы массива не изменяются в комментарии 1?

+2

Оба из них являются неопределенное поведение. Если вы хотите увеличивать элементы массива, просто напишите 'a [i] ++;'. Конец истории. – user3386109

+0

post increment -> say 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]++; 
Смежные вопросы