[英]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.