如何将指针传递给结构数组

How to pass pointer to array of structures?

本文关键字:结构 数组 指针      更新时间:2023-10-16
struct A
{
    struct one
    {
    int c;
    } details[MAX];
};
struct B
{
    struct two
    {
    int a;
    A::one b
    } details[MAX];
};

有一个如下所示的验证函数来验证结构 A 中结构的详细信息数组:

bool ValidateOne(struct one * ptr)
{
    struct one * tmp[MAX];
    for (int i = 0; i < MAX; ++i) 
        tmp[i] = ptr+i;
    Validate(tmp[0]);
}

然后需要对结构 B 的细节数组进行验证:我希望做:

bool ValidateTwo(struct two * ptr)
{
    struct one * tmp[MAX];
    for (int i = 0; i < MAX; ++i) 
        tmp[i] = &((ptr+i)->b);
    Validate(tmp[0]);
   //validate other stuff
};
Validate(struct one * ptrs[])
{
    int count;
    for (int i = 0; i < MAX; ++i) 
        count += ptrs[i]->a;
}

上面的代码会起作用吗?

您可以定义一个迭代器类型,该迭代器类型知道如何到达数组中的下一项。"A::iterator"将在一个简单的"一"数组上运行。"B::iterator"将在 B::two 的数组上运行。

这样,无论哪种情况,您都不需要创建单独的指针数组,只需创建迭代器的两种不同实现即可。

如果使用模板完成,则"ValidateOne()"也必须是模板。如果使用虚拟函数完成,则不需要模板。