Я сделал typedef для массивов с плавающей запятой, например:
typedef float fooType[];
Чтобы я мог объявлять и инициализировать массивы с плавающей запятой статически следующим образом:
fooType myArray = {1.0, 2.0, 3.0}
Это отлично работает. Я могу без проблем сказать myArray [2]
и вообще использовать мой fooType
, как мне хочется. В контексте моей программы очень ясно, что fooType
- это тип массива (на самом деле это гигантская таблица поиска), поэтому я не просто выполняю typedef float fooType
.
Как мне затем объявить и использовать переменную, чтобы указать на bar
и получить доступ к элементам bar
? Я не могу объявить такую простую переменную:
fooType bar = myArray;
Так как эта ошибка с недопустимым инициализатором
; Я не ожидал, что это сработает, поскольку компилятор не знает, сколько памяти выделить. Я пробовал несколько вещей с указателями:
fooType *bar = myArray;
Это дает предупреждение: инициализация из несовместимого типа указателя
и ошибки, когда я обращаюсь к элементам с bar [1]
.. Это объявляет штраф , как я и ожидал, поскольку теперь типы совпадают:
fooType *bar = &myArray;
Но, как и выше, ошибки компилятора с недопустимым использованием массива с неуказанными границами
, когда я говорю bar [1]
.
Это работает:
float *bar = myArray;
float val = bar[3];
Но я не хочу этого делать, потому что теряю читабельность своего typedef.
Я долгое время был похоронен в приятном объектно-ориентированном мире (Java), поэтому я надеюсь понять из этого, что идиоматично в C в этой ситуации. Я вполне готов изменить использование typedef в соответствии с соглашением, если нет прямого решения. Я чувствую, что есть, и это несложно.
Спасибо