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,
}
};
答案 0 :(得分:3)
您的代码会将db_table
数组中第一个元素的地址(与数组的地址相同)分配为struct db_table_s *
指针类型,分配给data_ptr
。 / p>
答案 1 :(得分:3)
存在强制转换只是为了将常量地址转换为非常量地址。
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。您的代码中缺少“,”和“;” :-(