C knows what type of object is being pointed to
sizeof
int a[6]; // assume array starts at address 0x1000 int *p; p = &a[0]; // p contains 0x1000 p = p + 1; // p now contains 0x1004