Arrays and Pointer Decay
Arrays in C are contiguous blocks of typed memory. int a[5] allocates 20 bytes on the stack (assuming 4-byte int). In most expressions, a decays to int * pointing to a[0] — this is why a[i] is equivalent to *(a + i). Key exceptions where arrays don’t decay: sizeof(a), &a, and initialization. Multidimensional arrays are just arrays of arrays — int m[3][4] is 12 contiguous ints, not an array of pointers. VLAs exist in C99 but are widely discouraged (stack overflow risk, no sizeof at compile time).