Предположим, что я пишу функцию, которая принимает float a[]
и смещение в этот массив и возвращает элемент с таким смещением. Можно ли использовать подписьУместно ли использовать off_t для смещений без байта?
float foo(float* a, off_t offset);
для этого? Или off_t
относится только к смещениям в байтах, а не к арифметике указателя с произвольными размерами элементов? то есть разумно ли говорить a[offset]
, когда смещение имеет тип off_t
?
Библиотека GNU C Справочное руководство говорит:
off_t
This is a signed integer type used to represent file sizes.
, но это не говорит мне много.
Моя интуиция заключается в том, что ответ «нет», поскольку фактический адрес, используемый в [смещении], является адресом смещения + sizeof (float) *, поэтому «sizeof (float) * offset» - это off_t
, а sizeof (float) - size_t
, и оба являются константами с «размерами».
Примечание: Смещение может быть отрицательным.
Довольно уверен, что доступ к отрицательным смещениям указателя считается злым. – zneak
@zneak: Может быть, и я не намерен, но 'a [-1]' вполне допустимый код. – einpoklum
@zneak Совсем нет. Почему это должно быть. –