2014-11-25 32 views
0

檢查我寫的以下C代碼。我認爲編譯器可能會抱怨我[a],但它實際上打印出與[i]完全相同的值。這是如何發生的?爲什麼即使使用索引交換數組名稱也可以使用數組?

#include <stdio.h> 

int main(){ 
    int a[3] = {0, 1, 2}; 
    int i; 
    for(i = 0; i < 3; i++){ 
    printf("normal a[%d] = %d\n", i, a[i]); 
    printf("abnormal a[%d] = %d\n", i, i[a]); 
    } 

    return 0; 
} 

打印出值:

normal a[0] = 0 
abnormal a[0] = 0 
normal a[1] = 1 
abnormal a[1] = 1 
normal a[2] = 2 
abnormal a[2] = 2 
+0

因爲['a [i] == i [a]'](http://stackoverflow.com/questions/381542/with-c-arrays-why-is-it-the-case-that-a5 -5a) – 2014-11-25 07:15:40

+0

你是什麼意思? – drdot 2014-11-25 07:15:54

+0

點擊我的評論中的代碼,看看爲什麼 – 2014-11-25 07:18:28

回答

2
  1. a[i]相當於*(a + i)
  2. i[a]相當於*(i + a)這相當於*(a + i)

因此,有效的,無論是是一樣的。

+0

我知道這可能是顯而易見的,因爲人們投票我的帖子。但只是爲了確保我明白髮生了什麼事情。要做指針算術,假設a是指針,而我是索引,我總是可以做我[a]並且它總是等於*(a + i)? – drdot 2014-11-25 07:18:26

+1

@dannycrane人們很可能會對你的帖子投票,因爲它是一個常見的常見問題,他們不認爲你發佈問題之前做了足夠的研究。至於它爲什麼起作用,請檢查鏈接重複問題中的答案。 – Lundin 2014-11-25 07:22:53

相關問題