如何将指向结构的指针数组传递给函数?

时间:2018-11-05 16:56:24

标签: c pointers struct compound-literals

考虑一种表示笛卡尔坐标中点的结构。

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}创建一个指向临时结构的指针,而在弯曲括号内的这些结构指针一堆创建了这些指针的数组,我可以将它们传递给函数。

我想念什么?为什么代码不起作用?

1 个答案:

答案 0 :(得分:1)

此复合文字不起作用:

export

因为它试图说初始化器(point_t*){.x=1.0, .y=1.0} 是一个指针,但不是。

要创建指向结构的指针数组,您需要执行以下操作:

{.x=1.0, .y=1.0}

但是,我怀疑您实际需要的仅仅是一系列结构。然后,您可以像这样创建它:

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}};

然后,您将更改函数以获取指向point_t p[] = { {.x=1.0, .y=1.0}, {.x=2.0, .y=2.0}, {.x=4.0, .y=4.0} }; 的指针:

point_t