如何将指向结构的指针数组传递给函数?
How to pass an array of pointer to structures to a function?
考虑一个表示笛卡尔坐标中的点的结构。
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}
创建一个指向临时结构的指针,并且这些结构指针在波浪形括号内创建了一个数组,我可以将这些指针传递给函数。
我错过了什么?为什么代码不起作用?
这个复合文字不起作用:
(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
:
的指针
void beziercurve(int smoothness, size_t n, point_t *points)
考虑一个表示笛卡尔坐标中的点的结构。
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}
创建一个指向临时结构的指针,并且这些结构指针在波浪形括号内创建了一个数组,我可以将这些指针传递给函数。
我错过了什么?为什么代码不起作用?
这个复合文字不起作用:
(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
:
void beziercurve(int smoothness, size_t n, point_t *points)