a[i] a[0] is at address a + 0 a[1] is at address a + 1 a[i] is at address a + i a[i] means *(a + i) i[a] means *(i + a) = *(a + i) = a[i] int a[] = int[10] double b[] = double[10] char c[] = char[10] a[i] means *(a + i) where +i means +(i ints) means +(i*4 bytes) b[i] means *(b + i) where +i means +(i doubles) means +(i*8 bytes) c[i] means *(c + i) where +i means +(i chars) means +(i*1 bytes) In general, a[i] means *(a + i) where +i means +(i*sizeof(a[0]) bytes)