Typedef неограниченного массива с плавающей запятой в C

Я сделал 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 в соответствии с соглашением, если нет прямого решения. Я чувствую, что есть, и это несложно.

Спасибо

8
задан Tim 29 November 2011 в 00:37
поделиться