a and b permanently point to the first elements of their respective arrays -- they hold the addresses of a[0] and b[0] respectively. The type only matters in how the compiler interprets and produces arithmetic operations with that address and the assembly it actually outputs based on the type. To subscribe to this RSS feed, copy and paste this URL into your RSS reader. The statement a=b; therefore does not work. An array variable names the array storage itself, not the location of an integer that in turn contains the location of the array. Below is an array of pointers in C that points each pointer in one array to an integer in another array. With arrays, why is it the case that a[5] == 5[a]? A pointer to int a[4] means 'a pointer to the address range a that is treated by the compiler as an array with int element width, where the compiler treats the start of the array as if it were a pointer to the array', and any operations on that type will be consistent in a derefernce chain i.e. It falls back to sorting by highest score if no posts are trending. The expression p[2] traces the value of the third array element (index 2). The following code can replace (for i=0; i