Leo*_*oAM 3 delphi parameters types
我有这个函数'bintoint',我用它来将二进制数转换为十进制:
function bintoint(var n: string):integer;
var i: integer;
Begin
result:= 0;
Trim(n);
for i:=length(n) downto 1 do
result := result + (strtoint(n[i])*(potencia(2,i-1))); {Here's the source for the error, at the last 'i'}
End;
Run Code Online (Sandbox Code Playgroud)
它在i处显示错误,它是'for'循环的变量,在'var'部分声明.'potencia'是我放在上面的另一个函数,它取代了'power(base,exp)',所以我可以用整数来计算幂.
function potencia(var base,exp: integer):integer;
Run Code Online (Sandbox Code Playgroud)
我在网站上看到过各种类似的问题,但是它们的错误出现在过程/函数参数的变量中,而不是变量部分.
如果你能告诉我这个问题,我们将不胜感激.
提前致谢.
我认为你对var函数参数列表中的含义有误解.在此设置var中用于指示参数是通过引用传递的.这意味着调用者可以看到函数中的修改.将此与传递值进行对比,其中在函数中进行的修改不会修改调用者传递的变量.
我怀疑你认为参数必须var像局部变量一样声明.事实并非如此.编程语言关键字通常是上下文敏感的,并且根据它们出现的位置具有不同的含义.
考虑一个var引用调用者变量的参数,以及一个pass by value参数作为调用者变量的副本.
所有这一切的结果是var必须将参数传递给实际变量.您无法传递文字值.这就是编译器消息告诉你的.
您的代码中的所有参数都不应该是var参数.声明这样的函数:
function bintoint(n: string):integer;
function potencia(base,exp: integer):integer;
Run Code Online (Sandbox Code Playgroud)
或者也许经过const.除了函数不能修改其参数的本地副本外,这在语义上与plain by value相同.
function bintoint(const n: string):integer;
function potencia(const base,exp: integer):integer;
Run Code Online (Sandbox Code Playgroud)
最后,Trim是一个返回修剪过的字符串的函数.它不会修改其参数.所以你的意思是写:
n := Trim(n);
Run Code Online (Sandbox Code Playgroud)