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