Это кастинг, что это за оператор? - PullRequest
0 голосов
/ 03 января 2019
data_ptr = (struct db_table_s *) &(db_table[0]);

У меня есть строка кода, подобная этой, в C, Что делает этот код? Это приведение типа или побитовый оператор?

struct db_table_s
{
    unsigned short int      d_event_code;
    int             (*db_read__image)(),
                    (*db_write_image)();
};

const struct db_table_s                         db_table[] =
{
    {   DB_seq1,                    
        _read_func,     
        _write_func,            
    },
    {   DB_seq2 ,                   
        _read_func1 ,   
        _write_func2,                                   
    }
};

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Приведение присутствует только для преобразования константного адреса в неконстантный адрес .

db_table - это вектор const struct db_table_s, тогда db_table[0] - это const struct db_table_s, тогда &(db_table[0]) - это const struct db_table_s *

Вероятно, код хочет (сильно) запомнить этот указатель, пока у нас есть struct db_table_s * data_ptr;, поэтому его необходимо привести, чтобы избежать предупреждения.

Актерский состав бесполезен в случае const struct db_table_s * data_ptr;

P.S. в вашем коде отсутствуют ',' и ';' : - (

0 голосов
/ 03 января 2019

Ваш код назначит адрес первого элемента в массиве db_table (который совпадает с адресом массива), приведенного как тип указателя struct db_table_s *, к data_ptr.

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