用于使用指向结构的指针循环struct成员

问题描述 投票:2回答:1

我认为我的指针游戏生锈了,我似乎无法让for循环实现工作。这就像指针不随数组一起递增。有什么建议?

我实现了我想要循环的“手动”版本。它按预期工作。

typedef struct txstruct_t
{
    uint8_t tx[8];
    void(*send)(struct txstruct_t *cthis, uint8_t arr[8]);

}txstruct_t;

void send(txstruct_t *cthis, uint8_t arr[8]);


void loop() 
{
    txstruct_t txobj;
    uint8_t buf[8] = { 1, 0, 1, 0, 1, 0, 1, 0 };
    send(&txobj, buf);

}

// This works
void send(txstruct_t *cthis, uint8_t arr[8])
{
    cthis->tx[0] = arr[0];
    cthis->tx[1] = arr[1];
    cthis->tx[2] = arr[2];
    cthis->tx[3] = arr[3];
    cthis->tx[4] = arr[4];
    cthis->tx[5] = arr[5];
    cthis->tx[6] = arr[6];
    cthis->tx[7] = arr[7];

    return;
};

/*
//This doesn't work :(
void send(txstruct_t *cthis, uint8_t arr[8])
{

    for (int i = 0; i < 8; i++)
    {
        cthis = cthis + i;
        cthis->tx[i] = arr[i];
    }

    return;
};*/

我想对此做一些澄清,所以我可以学习将来如何避免这种情况!甚至可能是实现此类缓冲区的更好方法。

c pointers struct arduino function-pointers
1个回答
5
投票

cthis = cthis + i;可以删除。它完全没有意义,因为这是一个未定义的尝试以某种方式重置指向struct的指针。你没有在循环的展开版本中这样做,对吗?

循环的其他组件很好。

© www.soinside.com 2019 - 2024. All rights reserved.