gpt4 book ai didi

c++ - 在计算中使用空指针

转载 作者:太空狗 更新时间:2023-10-29 20:06:42 24 4
gpt4 key购买 nike

这是对一个简单问题的相当长的介绍,但否则会有“为什么要在 C++ 中处理 void 指针?你这个可怕的人!”类型的问题。我宁愿 (a) 作废。 :)

我正在使用一个 C 库,我从中最初检索了一个多边形列表,它将对其进行操作。我使用的函数为我提供了一个指针数组 ( PolygonType** ),我从中创建了一个 std::vector<MyPolyType>。我自己的多边形类 MyPolyType .这又用于创建 boost::graph节点标识符由 vector 中的索引给出。

稍后执行时,我想计算两个多边形之间的路径。这些多边形以两个 PolygonType* 的形式提供给我,但我想在我的图表中找到相应的节点。如果我知道它们在以前的 vector 形式中的索引,我就可以找到它们。

现在,问题:PolygonType结构有一个 void*到一个“内部标识符”,我似乎不知道它的类型。但是我知道指针以固定步长(120 字节)增加。我知道指针的值,这将是第一个对象的偏移量。我可以用它来计算我的索引吗 (p-p0)/120 , 其中p是我要查找的多边形的地址,p0是第一个多边形的偏移量?我必须将地址转换为 int s,这个是便携的吗? (该应用程序可以在windows和linux上使用)

最佳答案

您不能减去两个空指针。编译器会大喊它不知道大小。您必须先将它们转换为 char 指针 (char*),然后将它们相减,然后除以 120。如果您确定对象的大小实际上是 120,那么它是安全的(虽然丑陋) 前提是 p 和 p0 指向同一数组中的对象

我还是不明白为什么p0是offset?我会说 p 是你的多边形的地址,而 p0 是第一个多边形的地址......我是不是误会了什么?

关于c++ - 在计算中使用空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com