Arytmetyka na wskaźnikach - int vs long vs size_t

0

Cześć,
na stronie: https://edu.pjwstk.edu.pl/wyklady/pro/scb/PRG2CPP_files/node25.html można przeczytać następujące zdanie:
"Załóżmy, że p jest wskaźnikiem typu Typ*, a zmienna shift jest zmienną typu całkowitego (ale nie long)."
Moje pytanie brzmi: dlaczego nie long? Czy z long to nie zadziała? A co z size_t?
Czy do operacji na wskaźnikach powinno się używać jedynie int-ów?
Czy są jakieś negatywne konsekwencje/ryzyka korzystania z size_t zamiast int-ów?

Z góry dziękuję za pomoc.

4

Nie wiem czemu nie long, jest jeszcze kilka kwiatków na tej stronie.
Kiedyś dawno temu rozmiar wskaźnika był właśnie typu int ale czasy się zmieniły.
Naturalnym typem dla indeksacji tablic oraz przechowywania odległości pomiędzy wskaźnikami jest typ size_t
Mogą wystąpić negatywne konsekwencje/ryzyka korzystania z innych typów całkowitych oprócz size_t
Chodzi o to że potrzebujemy typu T dla którego sizeof(void*)==sizeof(T)

4

Ja bym powiedział, że trochę bzdurny ten materiał. Przykładowo, na linuksach 64 bitowych, long to jest z grubsza to samo co ssize_t, które powinno się nadać do bycia indeksem (oczywiście o ile wartość nie jest ujemna). W każdym razie, long jest lepszą opcją niż int, a size_t jeszcze lepsze.
Zaskakuje mnie ta uwaga, bo chociażby nic nie jest napisane o tym, że nie nadają się char, czy inne z wielu dostępnych typów.

0

Dziękuję za wasze odpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1