当前位置:网站首页>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的&引用传递符号,表示该变量不是拷贝传递,形参是实参的别名。(其实底层的实现用的是指针)
边栏推荐
猜你喜欢
C语言-6月10日-my_strcat函数的编写
C语言-6月8日-给定一个字符数组‘i am a student’ 统计字符a的个数并进行输出
Scene-driven feature calculation method OpenMLDB, efficient implementation of "calculate first use"
【LeetCode-75】 颜色分类
基于微信小程序云开发实现的电商项目,可以自行定制开发
虚拟机更改IP地址
8-byte standard request parsing during USB enumeration
自己动手写RISC-V的C编译器-02语法描述方法和递归下降解析
Day 86
OpenGL 简化点光源与平行光的对比实验
随机推荐
【Unity】关于一个炮台Prefab的剖析
Lua 快速入门(一)——基础语法
Jetpack's dataBinding
本地缓存cookie的使用
C# 基础之字典——Dictionary(二)
Byte (byte) and bit (bit)
ARM assembly instruction ADR and LDR
Unity两种VR环境配置方法
开发公众号授权遇到的redirect_uri参数错误
将一个excel文件中多个sheet页“拆分“成多个“独立“excel文件
C语言实现三子棋(代码详解)
mysql basic summary
Content Size Fitter的使用
星盟-pwn-babyheap
Day 85
PAT乙级刷题之路
C语言-6月8日-给定一个字符数组‘i am a student’ 统计字符a的个数并进行输出
CLR via C# 第一章 CLR的执行模型
C-8月1日-递归与动态内存管理
heap2 (tcache attack,house of orange)