我有以下问题:
是否可以“动态”转换指针,而无需额外的变量赋值?让我们看一些例子:
typedef struct
{
uint8_t TimeSlot;
uint8_t TimeTick;
}Menager_t;
void SomeFunction(void* vp)
{
(Menager_t *)vp->TimeSlot = 0; //Error, request for member 'TimeSlot'
//in something not a structure or union
}
因此,可以通过将 void 指针分配给函数内部的临时指针来解决这个问题,如下所示:
void SomeFunction(void* vp)
{
Menager_t *temp = vp;
temp->TimeSlot = 0;
}
但我必须说,这个解决方案并不满足我的要求,而且对我来说看起来很脏(忽略了我正在编程的 uC 上 128 字节 RAM 内存的事实),而且我记得我过去做过这样的事情...
我恳请你们帮忙:) 问候!
PS:正在使用 GCC 4.7.2
最佳答案
您忘记添加一些括号。
((Menager_t *)vp)->TimeSlot = 0;
->
与 (cast)
运算符的绑定(bind)更强,因此首先评估 vp->TimeSlot
。
关于c - C 中的指针类型转换 "on the fly",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848523/