Pointer arithmetic moves by element positions, not raw byte counts.

Pointer Arithmetic

pointer_arithmetic.c
#include <stdio.h>

int main(void) {
    int values[4] = {2, 4, 6, 8};
    int offset = ;
    int *base = values;
    int item = *(base + offset);

    printf("item=%d\n", item);
    return 0;
}
#include <stdio.h>

int main(void) {
    int values[4] = {2, 4, 6, 8};
    int offset = ;
    int *base = values;
    int item = *(base + offset);

    printf("item=%d\n", item);
    return 0;
}
#include <stdio.h>

int main(void) {
    int values[4] = {2, 4, 6, 8};
    int offset = ;
    int *base = values;
    int item = *(base + offset);

    printf("item=%d\n", item);
    return 0;
}
element step `ptr + offset` advances by `offset` elements of the pointed-to type.
array base An array name can provide a pointer to its first element.