【发布时间】:2016-03-10 20:30:23
【问题描述】:
我在 Delphi 中处理过程和字符串时遇到了问题。事实是我希望看到输出字符串“1S2S3S4S5S6S”,但实际输出是“1234S5S6”。在调试过程中,它说 S1、S2、S3 和 S6 字符串变量未初始化(S1、S2、S3、S6 是 '' 字符串,S4 和 S5 的值为 'S')。有人可以向我解释一下吗?代码如下:
program StringTest;
{$APPTYPE CONSOLE}
procedure MyProcedure(S1: String; const S2: String; var S3: String;
S4: String; const S5: String; var S6: String;
out S7: String);
begin
S7 := '1' + S1 + '2' + S2 + '3' + S3 + '4' + S4 + '5' + S5 + '6' + S6;
end;
procedure Work;
var
S: String;
begin
S := 'S';
MyProcedure(S, S, S, S, S, S, S);
writeln(S);
end;
begin
Work;
readln;
end.
【问题讨论】:
-
当心:当你用
const声明一个参数时,你是在告诉编译器它不应该期望参数在该函数的持续时间内发生变化。你有责任确保你信守承诺;编译器无法为您检查它。在这种情况下,您正在修改S到S7,同时声明S2和S5不会改变。