Lua 中的指针和指向指针的指针等价物是什么?

我知道在 Lua 中可以使用表格类似于指针。那么指向指针的指针会是什么样子呢?例如 dp = {p = {}},那么与下面 C 代码中相对应的 Lua 代码会是什么呢?

    node **dp = head;

    while((*dp) && (*dp)->value > newp->value
    {
        dp = &(*dp)->next;
    }

    newp->next = *dp;
    *dp = newp;
}
点赞
用户6834680
用户6834680

是的,双指针可以在 Lua 中转换为嵌套表。

local function InsertItem(head, newitem)
   while head.next and head.next.value > newitem.value do
      head = head.next
   end
   newitem.next = head.next
   head.next = newitem
end

-- 典型用法:
local head = {}
InsertItem(head, {value = 3.14})
InsertItem(head, {value = 42})
InsertItem(head, {value = 1})

-- 现在数据如下所示:
-- head  = {next = elem1}
-- elem1 = {next = elem2, value = 42  }
-- elem2 = {next = elem3, value = 3.14}
-- elem3 = {              value = 1   }
2017-10-02 07:29:05
用户3574628
用户3574628

C指针和Lua表格之间的主要区别在于,在C中,您可以获取变量的地址并将其传递给函数进行修改。在Lua中无法实现,但函数始终可以返回修改后的值。

它们看起来像dp = {p = {}}

是的,这就是Lua中指向指针的最接近方式。

如果是这样,在Lua中相当于下面的C代码是什么?

使用递归来处理链接列表更加顺畅:

local function InsertItem(head, newp)
  if not head or head.value <= newp.value then
    newp.next = head
    return newp
  end
  head.next = InsertItem(head.next, newp)
  return head
end
2017-10-02 08:36:02