- When you make an array, you are making space for each element
- When you create a pointer, you are making space for 64 bit address
- arrays “decay to pointers”: when you identify an array by name, you are sharing the location of the leading element
- &arr gets an address to the FIRST element — don’t do this, &ptr gets the pointers’ address
Array is a special type that represent a segment of contiguously allocated memory. You can’t reassign an array to be equal to a new array.
int nums[] = {1, 2, 3};
int nums2[] = {4, 5, 6};
nums
and nums2
has no memory set aside. Calling sizeof()
on an array gets the length of the array; calling sizeof()
on the pointer it decays to will get the word size. Therefore, when we pass an array to a function will require you giving the size to the function as well.
To get a pointer to the beginning of an array, write &str[0]
. NEVER EVER write &str
, even if its the same thing: the latter sounds like you are getting the address of an array which doesn’t exist.
Pointer Arithmetic
If you add/subtract values to a pointer, the value you add/subtract gets scaled by the size of type so you can always add/subtract as needed.