#include <stdio.h>
int main(void) {
int a[3] = { 10, 20, 30 };
printf("a[0] = %d\n", a[0]);
printf("a[1] = %d\n", 1[a]);
printf("a[2] = %d\n", *(2 + a));
return 0;
}
output:
a[0] = 10
a[1] = 20
a[2] = 30
說明:
int a[3] = { 10, 20, 30 };
a其實是這個陣列的起始位址,所以 a[0] 相當於 *a ;
那 a[1] 等同於 *(a + 1),對C語言來說,a[1] ≡ *(a + 1)。
基於加法可交換性,所以 *(a + 1) ≡ *(1 + a),
所以對C語言來說, a[1] ≡ *(1 + a) ≡ 1[a]
...
靠,這什麼鬼。
參考:
http://www.csie.ntu.edu.tw/~b94087/yap01_pointers_and_arrays.pdf
http://blog-jy.blogspot.com/2006/11/array-subscripting-in-c.html
沒有留言:
張貼留言