gpt4 book ai didi

function - QBasic 传递类型作为函数参数

转载 作者:行者123 更新时间:2023-12-05 02:21:18 25 4
gpt4 key购买 nike

出于怀旧的原因回到了良好的旧 qbasic 并且以前从未在 qbasic 中使用过类型和函数,因为那时我还很年轻。

TYPE Vector2
x AS SINGLE
y AS SINGLE
END TYPE

FUNCTION Vector2Mag (a AS Vector2)
Vector2Mag = SQR((a.x * a.x) + (a.y * a.y))
END FUNCTION

FUNCTION Vector2Add (a AS Vector2, b AS Vector2)
DIM r AS Vector2
r.x = a.x + b.x
r.y = a.y + b.y
Vector2Add = r
END FUNCTION

但是我明白了

Illegal SUB/FUNCTION parameter on current line

在第一个函数行中使用 qb64。谷歌没有帮助,因为看起来我做的一切都是对的。我检查了传递多个变量、为参数指定类型、如何使用类型,但没有任何帮助。

谢谢你们。

最佳答案

在函数内部定义或使用用户定义的变量在 QB 中是非法的。函数是由 DEF FNname ... END DEF 还是 FUNCTION ... END FUNCTION 声明的并不重要

您可以做的是发送一个指向用户定义变量地址的指针,然后函数/子程序使用该地址直接从内存中读取它。用户定义变量的元素完全按照它们定义的顺序存储。在本例中,首先存储a(两字节整数),采用big endian格式,然后是b,共四个字节。

TYPE xtyp
DIM a AS INTEGER
DIM b AS INTEGER
END TYPE
DIM var AS xtyp
var.a = 5
var.b = 7
DEF SEG = VARSEG(var)
PRINT "The value of var.a and var.b multiplied is"; mpl(VARPTR(var))
END
'-------------------------- End of main program, function begins here -------
FUNCTION mpl(addr)
factor1 = PEEK(addr) + PEEK(addr + 1) * 256
factor2 = PEEK(addr + 2) + PEEK(addr + 3) * 256
mpl = factor1 * factor2
END FUNCTION

DEF SEG用于设置当前段,VARSEG()返回数值或用户定义变量的段。PEEK() 用于从某个内存位置读取字节,VARPTR() 返回其段中数字或用户定义变量的地址。请注意,上面的代码假定两个因子都是无符号的。如果它们是有符号的,则将单个字节转换为整数的过程必须略有不同。

关于function - QBasic 传递类型作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35233240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com