I don't understand how pointers works exactly in arrays.
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ptr is assigned the address of the third element
ptr = &x[2];
printf("value ptr = %d \n", *ptr); // 3
printf("address ptr = %d \n", ptr); // 3
printf("value ptr+2 = %d \n", *(ptr+2)); // 4
printf("address ptr+2 = %d \n", (ptr+2)); // 4
return 0;
}
The result:
value ptr = 3 address ptr = -1931225192 value ptr+2 = 5 address ptr+2 = -1931225184
The difference between ptr and ptr + 2 are 8 bytes.
So when ptr is equal to -1931225192 then why isn't ptr + 2 equal to -1931225192 + 2 but instead it is -1931225192 - 8?
Can someone explain how this works? Because it is logical to add 2 to the original value which was -1931225192 but instead this +2 changes into -8.
When you add an integer to a pointer, you are not adding a fixed number of bytes. You are adding a fixed number of elements. This means you are implicitly adding
n*sizeof(int)bytes. To avoid this, you can cast your array to achar *if you want to strictly add a number of bytes.Think about it this way: Since the
ptr[n]accesses a given element and is defined to be equivalent to*(ptr + n), we see that(ptr + n)without the*simply gets the address ofptr[n].The address converted to an integer is appears to be negative number, so adding a positive value decreases its magnitude. So the
+2changes to a+8not a-8.