An Array in C is a collection of similar types of data elements. It is a built-in data type and is widely used by developers. Here, we will cover the array declarations, the memory layout, array decay, and multi-dimensional arrays.
Array Declaration
The array is declared with the following syntax -
dataType arrayName [array_size];
An array can be defined by specifying the initial value of the array elements, the compiler can identify the array size if not specified explicitly.
💡
C99 and beyond support dynamic array declaration. The size of the array depends on the user-provided input.
Memory Layout
A contiguous memory space is allocated for array elements and can be accessed via an array index.
💡
The array size is a compile-time constant!
The ith element of an array can be accessed in a constant time via arr[i]. It is located at the address arr + i * sizeof(int). Here, the arr is the address of the first element in the array, in the above case 0x400.
arr, &arr, and &arr[0] all yield the same value (the address of the first element of the array and it is the same as the address of the array itself). Hence, arr[i] is effectively translated to *(arr + i) i.e. dereferencing element at the address (a+i).
According to the pointer arithmetic arr + i will be calculated to arr + i * sizeof(int).
🤯
Note: arr[i] = *(arr + i) = *(i + arr) = i[arr]
One can calculate the array size using sizeof() function. Where does array size come from? Is it stored anywhere?
Answer - No!
The arr is an object of type int[5], which is well known to the compiler at compile time. When you ask the compiler sizeof(arr) it returns 5 * sizeof(int) = 5 * 4 = 20. So the array size can be calculated with sizeof(arr) / sizeof(int).
Array and Pointers
Array and pointers are generally used interchangeably. An array passed to a function is normally captured as a pointer to the data type. When an array is passed, the address of the first element is passed and captured in a pointer.
Array Decay
Don't Miss an Update!
Helping you navigate the Embedded Systems career with ease! Technical posts, newsletters, special offers, and more.