在不使用offsetof的情况下获取struct成员的偏移量

时间:2017-02-06 21:17:17

标签: c pointers

我必须在已经存在的大代码中添加一段代码。 我的代码中有一个指针,* Ptr。该指针的类型为unsigned char。

unsigned char * Ptr;

我有以下结构。

struct
{
   uint8_t tag;
   uint16_t data[size];
   bool status;
}Test;

Test *TagData;

指针的类型如下所示,现在结构指针指向指针Ptr指向的位置;

TagData = (Test *)Ptr;

在我的代码中,我将一些输出值复制到此结构中,以便将这些值复制到* Ptr指向的内存位置。

为了将一些值复制到结构中的数据数组,我需要找到该struct成员的偏移量。我想在不使用offsetof函数的情况下完成它。我尝试了下面的操作,我收到了编译错误。

TagData->data  = (uint16_t *) (Ptr + sizeof(TagData->tag));

有人能告诉你怎么做吗?而且我不想使用offsetof函数。有更简单的方法吗?

1 个答案:

答案 0 :(得分:7)

不,没有比使用offsetof更简单的方法,offsetof旨在满足您的需求。

此外,offsetof不是一个函数,而是一个宏,隐藏了如果不使用offsetof就会执行的指针算法。

所以,明确答案:既然你甚至没有给出理由,那就不是一个好理由。克服它并使用{{1}}。