我知道你可以像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;
}
答案 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