2016-10-13 3 views
-1

У меня есть этот кусок кода CНеверное значение печатается на Printf

#include <stdio.h> 

int main(){ 
     int i , j , m , A[5]={0,1,15,25,20}; 
     i = ++A[1]; 
     printf("%d:\n",i); 

     j = A[1]++; 
     printf("%d:\n",j); 

     m = A[i++]; 
     printf("%d:\n",m); 

     printf("%d %d %d",i,j,m); 
     return 0; 
} 

и это выход

2: 
2: 
15: 
3 2 15 

В случае, если не Printf печать значения, как 2, 2, 15, но почему это печать 3, 2, 15

PS: Я действительно не злоупотреблял этим кодом, кто-то другой (возможно, мой профессор), и я просто изучаю C.

+0

Не злоупотребляйте '++'. Возможно, используйте скобки (для повышения удобочитаемости), поэтому '(A [1]) ++' вместо 'A [1] ++'. Инициализируйте каждую переменную. Скомпилируйте все предупреждения и информацию об отладке (например, 'gcc -Wall -g', если вы используете [GCC] (http://gcc.gnu.org/) ...). Прочитайте http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html –

ответ

0

Давайте посмотрим, что мы получили здесь ..

Int i, j, m, A [5] = {0,1,15,25,20};

i = ++A[1]; // takes the value of A[1], increment it by 1 and assign it to i. now i = 2, A[1] = 2 
    printf("%d:\n",i); 
    j = A[1]++; // takes the value of A[1](which is 2), assign it to j and increment the value of A[1] by 1. now j = 2, A[1] = 3 
    printf("%d:\n",j); 

    //remember the value of i? its 2 
    m = A[i++]; // takes the value of A[2](which is 15), assign it to m and increment the value of i by 1. now m = 15, i = 3 
    printf("%d:\n",m); 

    printf("%d %d %d",i,j,m); // Hola! we solve the mystery of bermuda triangle :) 
    return 0; 
1

Линия

m = A[i++]; 

будет увеличивать переменную я на месте после того, как он получает значение cooresponding из массива A.

+1

Я и идиот, спасибо. –

1

я инкрементируется как часть ниже заявления

 m = A[i++]; 
0

m = A [i ++];

этот код назначить A [2], который составляет от 15 до переменной м, а затем +1 к текущему значению I, чтобы стать 3.

Смежные вопросы