簡體   English   中英

使用增量運算符后混淆輸出

[英]Confusing output after use of increment operator

#include <stdio.h>

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

好的,現在程序編譯並運行正常。 但我得到的輸出是3 2 15,即i = 3,j = 2,m = 15.我不明白為什么i的值變為3為[1],即'1',當增量必須變為2時這是一種“追蹤輸出”類型的問題。 我正在使用gcc。

我已經在語句執行之前和之后寫了變量的值,並且已經發生了所有副作用。

int a[5] = {5, 1, 15, 20, 25};
int i, j, m;

// before : i is indeterminate, a[1] = 1
i = ++a[1];  
// after: i = 2, a[1] = 2

// before: j indeterminate, a[1] = 2
j = a[1]++;  
// after: j = 2, a[1] = 3

// before: m indeterminate, i = 2
m = a[i++];  
// after: m = a[2] = 15, i = 3

因此,最終值是

i = 3
j = 2
m = 15

執行以下行時

m = a[i++];

i再次增加,使其值為3

在第7行,你有

i = ++a[1];

這會增加a[1] (到2),然后將其分配給i

然后在第9行,你有

m = a[i++];

這會增加i (到3),然后將a[3] (15)賦給m。

我= 3因為

i = ++a[1] => i = ++1 and so i,a[1] are both 2
m = a[i++] => i = 3 because of i++

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM