Да, это должно быть целое число, потому что вы по существу выполняете арифметику указателя, где &array[0]
- указатель на начало массива (ну, технически это должно быть целым числом, потому чтоспецификация говорит, но это почему).
В этом контексте нет смысла перемещаться от базового указателя вверх к некоторой доле размера объекта.Вы в значительной степени гарантируете, что не будете указывать на начало элемента.
Посмотрите на это так:
int array[10] = { 0 };
// analagous to *(array + 5), where '5' is
// offsetting the pointer by sizeof(int) * 5 bytes
// If you were able to add 5.5 to the base address
// the value assigned to 'i' below would be interpreted as
// the four bytes following *(array + 5.5), i.e., garbage data.
int i = array[5];
Так как это кажется мне странным вопросом для началас, возможно, вы могли бы дать нам больше информации о том, что вы на самом деле пытаетесь достичь, а не о вашем предлагаемом решении?Возможно, в этом случае мы можем дать вам более полезные ответы.