这是演员,这是什么类型的操作员

时间:2019-01-03 07:26:37

标签: c struct

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 :(得分:3)

您的代码会将db_table数组中第一个元素的地址(与数组的地址相同)分配为struct db_table_s *指针类型,分配给data_ptr。 / p>

答案 1 :(得分:3)

存在强制转换只是为了将常量地址转换为非常量地址

db_tableconst 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。您的代码中缺少“,”和“;” :-(