Arytmetyka wskaźnika w C ++ używa przyrostu rozmiaru (typu) zamiast przyrostu bajtów?

Jestem zdezorientowany przez zachowanie arytmetyki wskaźnika w C ++. Mam tablicę i chcę przejść do N elementów z bieżącej. Ponieważ w C ++ wskaźnik jest adresem pamięci w BYTES, wydawało mi się logiczne, że kod będzienewaddr = curaddr + N * sizeof(mytype). Wywołało to jednak błędy; później to znalazłemnewaddr = curaddr + N wszystko działa poprawnie. Dlaczego tak? Czy powinien to być adres + N zamiast adresu + N * sizeof?

Część mojego kodu, w której to zauważyłem (tablica 2D z całą pamięcią przydzieloną jako jedna porcja):

// creating pointers to the beginning of each line
if((Content = (int **)malloc(_Height * sizeof(int *))) != NULL)
{
    // allocating a single memory chunk for the whole array
    if((Content[0] = (int *)malloc(_Width * _Height * sizeof(int))) != NULL)
    {
        // setting up line pointers' values
        int * LineAddress = Content[0];
        int Step = _Width * sizeof(int); // <-- this gives errors, just "_Width" is ok
        for(int i=0; i<_Height; ++i)
        {
            Content[i] = LineAddress; // faster than
            LineAddress += Step;      // Content[i] = Content[0] + i * Step;
        }
        // everything went ok, setting Width and Height values now
        Width = _Width;
        Height = _Height;
        // success
        return 1;
    }
    else
    {
        // insufficient memory available
        // need to delete line pointers
        free(Content);
        return 0;
    }
}
else
{
    // insufficient memory available
    return 0;
}