什么是指向lua中指针的指针

时间:2017-10-02 03:46:01

标签: pointers lua pointer-to-pointer

我知道你可以像lua中的指针一样使用表格。话虽如此,指针的指针是什么样的?它们看起来像dp = {p = {}}吗?如果是这样,下面的c代码相当于lua?

void InsertItem(node **head, node *newp){
    node **dp = head;

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

    newp->next = *dp;
    *dp = newp;
}

2 个答案:

答案 0 :(得分:3)

是的,双指针可以作为嵌套表转换为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

-- Typical Usage:
local head = {}
InsertItem(head, {value = 3.14})
InsertItem(head, {value = 42})
InsertItem(head, {value = 1})

-- Now the data is the following:
-- head  = {next = elem1}
-- elem1 = {next = elem2, value = 42  }
-- elem2 = {next = elem3, value = 3.14}
-- elem3 = {              value = 1   }

答案 1 :(得分:0)

C指针和Lua表之间的最大区别在于,在C中,您可以获取变量的地址并将其传递给函数以进行修改。你不能在Lua中这样做,但函数总是可以返回修改后的值。

  

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

是的,就像你可以到达指向Lua中指针的指针一样接近。

  

如果是这样,下面的c代码相当于lua?

链接列表在递归时往往更顺畅:

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