Рассмотрим структуру, которая представляет точку в декартовой координате.
struct point { float x, y; };
typedef struct point point_t;
У меня есть функция, которая берет группу точек и рисует кривую на основе пройденных точек, чье определение выглядит следующим образом:
void beziercurve(int smoothness, size_t n, point_t** points)
Я написал функцию bezier
и хочу проверить, правильно ли работает моя функция. Итак, внутри основной функции я передал следующие фиктивные значения в функцию через составные литералы,
point_t **p={(point_t*){.x=1.0, .y=1.0},
(point_t*){.x=2.0, .y=2.0},
(point_t*){.x=4.0, .y=4.0}};
beziercurve(100, 3, p);
LLVM выдает мне следующую ошибку,
bezier.c:54:44: error: designator in initializer for scalar type 'point_t *'
(aka 'struct point *')
point_t** p=(point_t**){(point_t*){.x=1.0,.y=1.0},(point_t*){.x=2.0,.y=2.0...
^~~~~~
Я даже попробовал что-то подобное,
point_t **p={[0]=(point_t*){.x=1.0, .y=1.0},
[1]=(point_t*){.x=2.0, .y=2.0},
[2]=(point_t*){.x=4.0, .y=4.0}};
beziercurve(100, 3, p);
Но это тоже не работает. Моя логика выглядит следующим образом: (point_t*){.x=1.0, .y=1.0}
создает указатель на временную структуру, а набор этих указателей структуры внутри волнистых скобок создает массив тех указателей, которые я могу передать функции.
Чего мне не хватает? Почему код не работает?