An array is a contiguous memory location which holds data. The data can be integers, characters, floating point numbers, structures etc. Each array element takes a distinct memory location. They all have distinct address.
In the following example,
int32_t data type is used.
int32_t represents 32 bit signed integer and is defined in
stdint.h header file in supported compilers. While
int data type doesn't guarantee about its size,
int32_t is guaranteed to be 4 bytes long in every compiler that supports it. If your compiler doesn't support
int32_t data type, try an integer type (
long long) which is 32 bit wide in your environment. Although according to C standard compilers aren't forced to implement
int32_t data type, to make the size of integers predictable,
int32_t type is used in following examples in this tutorial.
Notice that each array element is 4 bytes long and takes contiguous memory locations. If
&arr is 10, then
&arr is 14, and so on. Do you know that replacing
&i[arr] also works in the example above? Try this! Caution: Try this for fun. Don't write
&i[arr] in your final code of your coding project as
&i[arr] is less intuitive to get the address of the
i-th element in array
It works because for compiler
i[arr] are same operation. Compiler converts
arr + i and similarly
i + arr. Since
arr + i and
i + arr produce same result, so do
arr + i mean? It is the address of the
i-th element of the memory location pointed to by
arr. This sounds like
arr is a pointer. In fact, an array name in C acts as a pointer to the first element of the array!
Try the following example and notice that
arr + i are producing the same address:
Explanation in words:
arr + 0 = address of 1st element of array arr arr + 1 = address of 2nd element of array arr arr + 2 = address of 3rd element of array arr ... arr + n = address of (n + 1)-st element of array arr