当前位置:网站首页>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的&引用传递符号,表示该变量不是拷贝传递,形参是实参的别名。(其实底层的实现用的是指针)
边栏推荐
猜你喜欢
随机推荐
Day 79
Lua 快速入门(五)——协程(thread)
2022DASCTF X SU 三月春季挑战赛 checkin ROPgadget进阶使用
Lua 快速入门(四)——多脚本执行
Intelligent risk control China design and fall to the ground
Unity两种VR环境配置方法
buuctf hacknote
【无标题】
【LeetCode-202】快乐数
js learning advanced BOM part (pink teacher notes)
欧拉法解微分方程
Dark Horse Event Project
手把手导入企业项目(快速完成本地项目配置)
开发公众号授权遇到的redirect_uri参数错误
swagger常用注释API @ApiModel、@ApiModelProperty的用法
Lua 快速入门(三)——表(Table)
【LeetCode-389】找不同
The whole process of Tinker access --- configuration
OpenGL 摄像机(Camera)类的创建
stack stack