2015-01-16 3 views
0

Может ли кто-нибудь помочь мне понять, как вывод 3 2 15 для следующего кода?Получение неожиданного вывода

Я ожидаю выход как: 2 2 15 потому

  • первый элемент a[1] т.е. 1 получит предварительно увеличивается и i будет назначен 2,
  • затем j также будет назначена 2, потому что пост инкремент сделано, и
  • , когда речь идет о m, a[i++] должно быть как a[2] т.е. 15, sin ce post и m должен быть назначен 15.

Пожалуйста, помогите мне, если я ошибаюсь.

#include<stdio.h> 
int main() 
{ 
    int a[5]={5,1,15,20,25}; 
    int i,j,m; 
    i=++a[1]; 
    j=a[1]++; 
    m=a[i++]; 
    printf("%d %d %d\n",i,j,m); 
    return 0; 
} 
+3

«Разный выход» означает * отличается от ожидаемого *? Тогда, пожалуйста, добавьте к своему сообщению, что вы ожидаете (и почему). – usr2564301

ответ

0

Второй менструатор вашего массива равен 1. Итак, i = ++ a [1]; переводит на i = ++ 1 ;. это 2. J - это то же самое (в данном случае). Затем вы вынимаете второе значение вашего массива (15) с «i», которое равно двум, затем вы добавляете его в «i». Результат в i = 3, j = 2 и m = 15.

Примечание: i = ++ 1; просто для того, чтобы визуализировать происходящее, это не должно и не может быть использовано.

+0

Я понял, спасибо :) –

+0

Что такое 'i = ++ 1;'? – haccks

1
i=++a[1]; /* a[1] = 1 and you have a pre-increment so */ 

    i = 2; 

    j = a[1]++; /* a[1] = 2 and post-increment so j = 2 */ 

    j= 2 

    m=a[i++]; /* m = a[2] = 15 and `i` is incremented later i = 3 */ 

    m = 15 

    i = 3 

So i=3 j = 2 and m = 15 
0
  • а [1] получают приращение до 2; i получает это значение
  • значение a [1] (все еще 2) также присваивается j, после чего значение [1] увеличивается до 3
  • a [2] (15) присваивается m; Затем я получает приращение до 3
4
int a[5]={5,1,15,20,25}; 

Приращение a[1] к 2, и установить i к этому

i=++a[1]; 

Установите j в a[1] (2), затем приращение a[1] до 3

j=a[1]++; 

установить m в a[i] (a[2], или 15), затем приращение i до 3

m=a[i++]; 
0
a[1]=1; 
i=++a[1]; //a[1] is pre-incremented by 1 so i=2; 
j=a[1]++; // a[1] is post incremented by 1 so j=2; 
m=a[i++]; // i is post incremented by 1 so m =a[2] so m=15 
      // as i was post incremented so i=2+1 in next step. 
0
i=++a[1]; ==> ++a[1] == 2 

i получает значение предварительно увеличивается массива a[1], который 2

j=a[1]++; ==> a[1]++ == 2 

Аналогичным образом j становится 2, но сообщение увеличивается.

m=a[i++]; ==> a[3] == 15 /* Here i became 3*/ 

Вот первый i, который уже 2 увеличивается на 1 становится 3, которое пост увеличивается в следующем заявлении, в результате m получает назначение с a[2], который 15.

+0

@haccks Исправлено. Спасибо –

+0

Ваше редактирование было в период льготного периода. Я не могу отменить свой голос. Измените это с помощью некоторых объяснений. – haccks

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