给出
void func(uint8_t type, void **structs)
{
switch(type)
{
case 1:
a1 = (UI_Remote_s*)structs->Method; //expression must have pointer to struct
a2 = ((UI_Remote_s*)structs)->Method; //correct
break;
}
}
第一次尝试是错误的。为什么?
答案 0 :(得分:2)
我不会使用这种类型的转换,因为它使代码更难阅读。而是使用一个临时变量来存储指针。这将使代码更易于阅读和理解。编译器很可能会在生成的代码中对其进行优化。
UI_Remote_s **ptr = (UI_Remote_s **)structs;
a2 = (*ptr) -> Method;
a2 = (*(ptr + 5)) -> Method;
a2 = ptr[2] -> Method;
.....