编译器警告将结构数组(结构的本身成员)传递给Function

时间:2015-01-17 17:41:31

标签: c arrays pointers struct

我定义了以下结构 - 坐标结构本身是父结构的成员

typedef struct _coord {
    double x;   // time axis - seconds rather than samples
    double y;
}   t_coord;

typedef struct _algosc {                    
    t_coord coords[COORD_COUNT];        
    //... struct continues beyond this but...
}   t_algosc;

我创建一个指向父结构的指针,然后分配内存。 object_alloc是一个特定于其他地方定义的API(MAX5)的malloc类型函数。这一切都有效,所以我不包括细节。

static t_class *algosc_class;   // pointer to the class of this object

    t_algosc *x = object_alloc(algosc_class)

这是我希望传递coord结构数组的函数的声明

    void    au_update_coords(t_coord (*coord)[])

我将数组传递给函数,如下所示,

au_update_coords(x->coords);

一切正常,但我收到编译器警告

1>db.algosc~.c(363): warning C4047: 'function' : 't_coord (*)[]' differs in levels of indirection from 't_coord [4]'
1>db.algosc~.c(363): warning C4024: 'au_update_coords' : different types for formal and actual parameter 1

我无法确定传递结构的正确方法。谁能帮忙。同样仅仅是为了我的启发,我还有什么样的风险可以让它保持原样?

1 个答案:

答案 0 :(得分:0)

你需要传递一个指向数组的指针,所以你需要获取数组的地址,使它成为一个指向数组的指针,这个

au_update_coords(x->coords, otherArguments ...);

应该成为

au_update_coords(&x->coords, otherArguments ...);

但你不需要那样做。如果您担心函数没有改变阵列,请不要担心它,您需要更改函数签名

void    au_update_coords(t_coord (*coord)[], otherArguments ...)

void    au_update_coords(t_coord *coord, otherArguments ...)

并直接传递数组,如

au_update_coords(x->coords, otherArguments ...);

当然,您可能需要在访问阵列的任何地方修复au_update_coords()函数。