c - C 中的指针类型转换 "on the fly"

标签 c pointers casting

我有以下问题:

是否可以“动态”转换指针,而无需额外的变量赋值?让我们看一些例子:

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/

相关文章:

c - read() 和 write() 将多余的输出发送到 Vim

c++ - 我可以将 char* 缓冲区转换为对象类型吗?

c - 如何删除 "incompatible implicit declaration"警告

c - 异步将值返回给父进程

c - 将整数类型转换为 void*

python - 使用 ctypes 访问内存地址处的数据

c++ - 试图为所有子类 B 编辑父类的静态变量

arrays - 如何在 Scala 中进行装箱?

c - 处理器和协处理器之间的加密区别

c++ - 通过显式调用类构造函数来使用对象与默认初始化+赋值运算符