как отслеживать изменение значения элемента структуры в C?

#c #tracking

#c #отслеживание

Вопрос:

 struct STATE{
  uint8 bit;
  uint8 cop;
}
STATE *state_array[1024];

state_aray[0]->bit = 8;     
state_aray[0].cop =  8;
state_aray[1]->bit = 0;     
state_aray[1].cop = state_aray[1]->bit amp; 8 != state_aray[0]->bit amp; 8
state_aray[2]->bit = 12;   
state_aray[2].cop = state_aray[1]->bit amp; 8 != state_aray[0]->bit amp; 8 amp;amp; state_aray[2]->bit amp; 8 != state_aray[1]->bit amp; 8
state_aray[3]->bit = 0;     
state_aray[3].cop = state_aray[1]->bit amp; 8 != state_aray[0]->bit amp; 8 amp;amp; state_aray[2]->bit amp; 8 != state_aray[1]->bit amp; 8 amp;amp; state_aray[3]->bit amp; 8 != state_aray[2]->bit amp; 8
state_aray[4]->bit = 8;     
state_aray[4].cop = ...

state_aray[5].cop = ... ...
...
state_aray[100].cop = ... ...... ......... ....... ......... ....... ...... ....... ............... ........ ...... ............ .... ......... ...... ..


  

есть ли способ использовать только state_aray [i-1]-> cop и state_aray[i-1]-> bit и state_aray[i]-> bit для получения state_aray[i]-> cop?

tks

Комментарии:

1. Пожалуйста, перефразируйте свой вопрос. Я понятия не имею, что вы пытаетесь сделать.

2. Откатил вашу последнюю правку. Вопросы не могут быть удалены, если имеется более одного ответа. Смотрите здесь .

3. если ваш вопрос можно удалить, прямо под полем тега для ‘c’ есть ссылка ‘удалить’. Я не уверен, изменились ли правила так, что если есть ответы или ответы с голосами «за», то вопрос нельзя удалить. Вы также могли бы рассмотреть возможность пометить модераторов и попросить их удалить это для вас. Если вопрос не может быть удален, лучше оставить его видимым, возможно, с лучшим объяснением того, что вы пытаетесь сделать.

4. Вы должны быть последовательны в использовании ‘ . ‘ vs ‘ -> ‘. Учитывая, что у вас есть массив указателей, вам необходимо убедиться, что вы инициализировали эти указатели, которые в показанном коде отсутствуют. Или вам нужен простой массив ваших структур (более правдоподобный). Для первого варианта вам нужно использовать обозначение ‘ -> ‘; для второго варианта вам нужно использовать обозначение ‘ . ‘. Кроме того, вам следует использовать несколько круглых скобок и, возможно, цикл или даже пару вложенных циклов.

Ответ №1:

Не будет работать. В C нет механизма «я являюсь членом этой структуры», в отличие от концепций ООП «это» или «я». Вот почему в C вы просто скрываете свою реализацию структуры и предоставляете функции для изменения значений, в которых вы незаметно устанавливаете другие значения.

 STATE *create_state(void)
{
    STATE *retval;

    if( (retval = malloc(sizeof(STATE))) == NULL )
        return NULL;
    retval->cop = -1;
    retval->bit = 0;
    return retval;
}

void set_state(STATE *st, int val)
{
    st->bit = val;
    st->cop  ;
}

int has_state_changed(STATE *st)
{
    return st->cop;
}