我想创建一个获取 void 指针的函数。该指针指向任意用户数据。这与现在无关。哪个描述符更重要,它描述了这个用户数据。就是根据这个数据。我想得到它的地址,有两种不同的解决方案:
struct data_desc {
size_t size;
data_type_t type;
/* And so on... */
};
/* Operate on the descriptor */
void operate_on_data(void *ptr)
{
struct data_desc *desc;
/* Now I want to get the desc /*
/* This is the first approach, simply fails */
desc = ((struct data_desc *)ptr) - sizeof(struct data_desc);
/* This is the second, it works...*/
desc = (struct data_desc *)ptr;
desc--;
/* Do something with desc */
}
如您所见,我使用两种不同的方法来获取描述符的地址。我认为第一个更自然,但它只是行不通。我使用了更多的括号来避免优先级问题。
我知道这些方法并不安全。第一个不起作用,为什么?这种行为背后的原因是什么?
提前致谢!