Доступ к вложенной структуре - PullRequest
0 голосов
/ 08 октября 2018

У меня есть вложенная структура этого типа -

typedef struct {
    head     HEAD;  
    tail     TAIL;
    start    START;
    end      END;
}NODE;

У меня есть указатель на эту вложенную структуру -

 NODE* settings = malloc(sizeof(NODE));

, и я передаю этот указатель на вложенную структуру функции,В функции мне нужно получить доступ к отдельным структурам в основной структуре, чтобы добавить байты в структуре.Это прототип функции -

int checksumVerify( NODE* settings)
{
    unsigned int i;
    unsigned char checksum = 0;

    //I need to access the size of individual structs from the pointer to main struct and then add all the bytes in the inner struct together.
    for (i = 0; i < sizeof(*settings)->HEAD; i++)
    {
        checksum += (char)(settings)->HEAD;
        settings++;
    }
    //Like wise I need to do it for the second struct as well
    for (i = 0; i < sizeof(*settings)->TAIL; i++)
    {
        checksum += (char)(settings)->TAIL);
        settings++;
    }
    return ((int)((checksum == 0) ? 1 : 0));
}

Я не знаю, знаю синтаксис для доступа к размеру отдельных структур, и доступ к каждой записи в каждой отдельной структуре здесь неправильный.Каков правильный синтаксис для обоих?

1 Ответ

0 голосов
/ 08 октября 2018

Я знаю синтаксис для доступа к размеру отдельных структур, и доступ к каждой записи в каждой отдельной структуре здесь неправильный.Каков правильный синтаксис для обоих?

sizeof(*settings)->TAIL -> sizeof(settings->TAIL)

NODE* settings;
settings->HEAD.some_member_of_head;
settings->TAIL.some_member_of_tail;

Могу я просто выполнить цикл с размером отдельной структуры, а неполучить доступ к отдельным элементам во внутренней структуре?

char *p = (char*)&settings->HEAD;
for (size_t i = 0; i < sizeof(settings->HEAD); ++i)
    checksum += p[i];

Но, как сказал @JimRhodes: вы должны знать о заполнении и упаковке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...