Для зацикливания членов структуры с указателем на структуру - PullRequest
2 голосов
/ 17 апреля 2019

Я думаю, что моя игра с указателями ржавая, я не могу заставить работать реализацию цикла 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;
};*/

Мне бы хотелось кое-что прояснить, чтобы я мог научиться избегать этого в будущем!Может быть, даже лучший способ реализации таких буферов.

1 Ответ

5 голосов
/ 17 апреля 2019

cthis = cthis + i; можно удалить.Это не имеет никакого смысла, поскольку это неопределенная попытка каким-либо образом сбросить указатель на struct.Вы не делаете этого в развернутой версии цикла, не так ли?

С остальными компонентами цикла все в порядке.

...