对于一个简单的问题,这是一个很长的介绍,但是否则会出现"你为什么要在C++中处理void指针?"这个类型的问题!你这个可怕的人!我宁愿(a)无效.:)
我正在使用一个C库,我可以从中检索一个它将操作的多边形列表.我使用的函数给了我一个指针数组(PolygonType**),我从中创建了一个std::vector<MyPolyType>自己的多边形类MyPolyType.这又用于创建boost::graph由向量中的索引给出的with节点标识符.
在执行的稍后时间,我想计算两个多边形之间的路径.这些多边形以两种形式提供给我PolygonType*,但我想在我的图中找到相应的节点.如果我知道他们在上一个矢量形式中的索引,我可以找到这些.
现在,问题是:PolygonType结构有一个void*"内部标识符",似乎我不知道它的类型.但我确实知道指针以固定步长(120字节)增加.我知道指针的值,它将是第一个对象的偏移量.我可以使用它来计算我的索引(p-p0)/120,在哪里p是我想要找到的多边形的地址,并且p0是第一个多边形的偏移量?我必须将地址投射到ints,这是便携式吗?(该应用程序可用于Windows和Linux)
你不能减去两个void指针.编译器会大声说它不知道大小.你必须首先将它们转换为char指针(char*)然后减去它们然后除以120.如果你确定你的对象的大小实际上是120,那么只要p和p0指向对象就是安全的(虽然很难看)在同一个数组中
我还是不明白为什么p0是偏移?我会说p是你的Polygon的地址,而p0是第一个多边形的地址......我误解了什么吗?