当前位置:网站首页>lua-table引用传递和值传递

lua-table引用传递和值传递

2022-08-11 05:31:00 星际行走

function test1(tt)
    tt = {1, 3, 5}
end
 
function test2(tt)
    tt[1] = 2
    tt["a"] = "hello"
end
 
 
t = {4, 5, 6}
 
test1(t)
 
for k,v in pairs(t) do
    print(v)
end
 
print("------")
 
t = {4, 5, 6}
 
test2(t)
 
for k,v in pairs(t) do
    print(v)
end

test1改不了外部的tt的值,
test2能改变外部tt的值,但是前提是传入的外部tt不能为nil。如果tt为nil,在函数内再分配空间、赋值,外部的tt还是为nil。可以先在外部给tt分配内存 tt = {},然后再作为参数传递给test2,此时在test2里面修改tt的值,外部tt也会改变


lua中table的引用传递只能是修改该table对象的内部元素,对table对象的复制操作,无法做到引用传递的效果。

所谓值传递,其实是一种拷贝传递,函数调用时,在函数栈中, 拷贝实参的值到形参,所以,对形参的修改当然不会影响实参。

要做到函数内部修改,在外部可见,一种方式是传递地址,如这里的table的内部元素,另一种是传递引用,引用传递需要语言级别的支持,如c的&引用传递符号,表示该变量不是拷贝传递,形参是实参的别名。(其实底层的实现用的是指针)
 

原网站

版权声明
本文为[星际行走]所创,转载请带上原文链接,感谢
https://blog.csdn.net/u012685888/article/details/122715260