2013-07-05 55 views
-5

我有以下程序:錯誤的概念在C++程序

#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(" The value of i is %d\n",i); 
    printf(" The value of j is %d\n",j); 
    printf(" The value of m is %d\n",m); 
    return 0; 
} 

根據我的概念中,i的值,j和k分別應2,2和15是。但編譯器分別顯示i,j和3,2,15的值?爲什麼?你能解釋這個輸出背後的邏輯嗎?

+3

你知道如何使用調試器嗎?這裏是[教程](http://www.youtube.com/watch?v=z5gBIizwsY0)。 – sashoalm

+0

你的鏈接對我來說是一個很好的資源。謝謝 。 –

+1

如果你很難看到這一點:一次不要做幾件事。如果你把它寫成'++ a [i];這可能非常清楚。我= a;一個[1] ++; j = a [1]; m = a [i];我++;'。一起幹擾陳述沒有任何好處。 – stefan

回答

9

讓我們跟隨整個程序發生了什麼i

int a[5]={5,1,15,20,25}; 
i=(++a[1]); // i is now 2 (a[1]+1) 
m=a[i++]; // after this, i=3 
+1

+1:很好看! – johnchen902

+0

編譯器分別顯示i,j和m的值分別爲3,2,15?爲什麼? –

+1

根據你的問題,你已經與你的編譯器達成一致,關於'j'和'k'。我的回答解釋了「我」。 – NPE

3

似乎沒有什麼是錯在這裏:

#include<stdio.h> 
int main() 
{ 
    int a[5]={5,1,15,20,25}; 
    int i,j,m; 
    i=(++a[1]); //i=2; a[1] = 2; i.e first increment a[1] then equate i to a[1] 
    j=a[1]++; //j = 2; a[1] = 3; i.e first equate j to a[1] then increment a[1] 
    m=a[i++]; //m = a[2]=15; i=3; i.e. first equate m to a[i] then increment i 
    printf(" The value of i is %d\n",i); 
    printf(" The value of j is %d\n",j); 
    printf(" The value of m is %d\n",m); 
    return 0; 
} 
+0

根據我的理念,i,j和k的值應分別爲2,2和15。但編譯器分別顯示i,j和3,2,15的值?爲什麼?你能解釋這個輸出背後的邏輯嗎? –

+0

@Ocena Pothik,操作++ a [1]首先增加a [1],然後將i等於a [1],使得2在第三步中i ++使i 3 –

0

在聲明i=(++a[1]);,一個[1] incresed的第一個值通過1.然後它被分配給我,現在我是2. 看你做任務m=a[i++]。有優先here.First a [i]其中我是2被分配給m,那麼我的值是在這個聲明中增加了。現在我是3.So首先是賦值,然後是增量。如果聲明是m=a[++i],則不是這種情況。在此聲明中,我先增加然後再執行賦值