Почему я печатаю значение 3 в следующем коде? - PullRequest
0 голосов
/ 30 марта 2019

Выход кода ниже: 3 2 15
Я ожидал 2 2 15
Почему это?

#include <stdio.h>

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

Ответы [ 5 ]

2 голосов
/ 30 марта 2019

Операторы увеличения / уменьшения фактически изменяют значение объекта, а не просто возвращают полученное значение.В строке m=a[i++]; вы снова увеличиваете i.

1 голос
/ 30 марта 2019

, потому что вы увеличиваете его в два раза:

i=++a[1];     // i = 2
j=a[1]++;
m=a[i++];     // i = 3
printf("%d %d %d",i,j,m);
0 голосов
/ 30 марта 2019

Давайте пошагово продолжаем:

#include <stdio.h>

int main() {
    int a[5] = { 5, 1, 15, 20, 25 };
    i = ++a[1];  // a[1] is incremented, becomes 2, i gets this value 2
    j = a[1]++;  // j gets a[1] which is 2, then a[1] is incremented and becomes 3
    m = a[i++];  // m gets a[2] which is 15, i is incremented and becomes 3
    printf("%d %d %d", i, j, m);  // prints 3 2 15
    return 0;
}
0 голосов
/ 30 марта 2019

Код

#include <stdio.h>

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

Давайте пройдем этот шаг за шагом.

  • a [1] равно 1

  • я + ++ 1, то есть .... 2

  • m - это [i], то есть [2], которое ... 15

После выполнения этого оператора i ++, поэтому

после m = 15,

мне становится 3,

Эти значения печатаются с использованием printf

0 голосов
/ 30 марта 2019

Я хочу, чтобы это помогло вам.

#include<stdio.h>
int main()
{
int a[5]={5,1,15,20,25};
i=++a[1]; // i = 2
j=a[1]++; // j = 2
m=a[i++]; // m = 15, i = 3
printf("%d %d %d",i,j,m);
return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...