为什么我在以下代码中打印3值?

时间:2019-03-30 14:04:34

标签: c

以下代码的输出为: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 个答案:

答案 0 :(得分:2)

递增/递减运算符实际上会更改对象的值,而不仅仅是返回结果值。在m=a[i++];行中,您将再次增加i

答案 1 :(得分:1)

因为您将其增加了两次:

i=++a[1];     // i = 2
j=a[1]++;
m=a[i++];     // i = 3
printf("%d %d %d",i,j,m);

答案 2 :(得分:0)

我希望它能为您提供帮助。

#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;
}

答案 3 :(得分:0)

代码

#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

  • i是++ 1,即.... 2

  • m是a [i],是a [2],即... 15

此语句执行后,i ++

在m = 15之后

我变成3,

这些值是使用printf打印的

答案 4 :(得分:0)

让我们逐步进行:

uint32_t